网络编程常识

2024-06-29 1161阅读

网络编程常识

  • 网络编程常识
    • 一、 OSI七层模型对应 TCP/IP四层模型
    • 二、TCP协议
    • 最后

      网络编程常识

      一、 OSI七层模型对应 TCP/IP四层模型

      OSI七层模型TCP/IP四层模型
      应用层
      表示层
      会话层应用层
      传输层传输层
      网络层网络层
      数据链路层
      物理层网络接口层
      • 物理层:主要定义物理设备标准,如网线接口类型,数据的物理传输,包括电压、电缆规范、集线器、中继器等,确保原始比特流的传输
      • 数据链路层:在物理层之上,负责将比特流组合成帧,并处理错误检测和流量控制,如以太网、PPP协议等
      • 网络层:负责数据包的路由和转发,实现网络互连,点对点通信,主要协议包括IP、ICMP、IGMP等
      • 传输层:提供端到端的通信连接服务,如TCP和UDP协议,确保数据的可靠传输或最佳努力传输。
      • 会话层:建立、管理和终止网络连接上的会话,如RPC,SQL等协议,负责同步和对话控制。
      • 表示层:处理表示层数据转换问题,确保不同系统间的数据可以正确解释,如加密、压缩等。
      • 应用层:直接为用户提供服务,如HTTP、FTP、SMTP等协议,处理文件传输、电子邮件等应用。

        二、TCP协议

          TCP协议,既传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

        网络编程常识
        (图片来源网络,侵删)

          当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的**最大传送单元(MTU)**限制。之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。

          TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK),如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。

        • 在数据正确性与合法性上,TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和;同时可以使用md5认证对数据进行加密。
        • 在保证可靠性上,采用超时重传和捎带确认机制。
        • 在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。

          在拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AIMD算法)。该算法主要包括四个主要部分:

          (1)慢启动

            每当建立一个TCP连接时或一个TCP连接发生超时重传后,该连接便进入慢启动阶段。进入慢启动后,TCP实体将拥塞窗口的大小初始化为一个报文段,即:cwnd=1。此后,每收到一个报文段的确认(ACK),cwnd值加1,即拥塞窗口按指数增加。当cwnd值超过慢启动阈值(ssthresh)或发生报文段丢失重传时,慢启动阶段结束。前者进入拥塞避免阶段,后者重新进入慢启动阶段。

          (2)拥塞避免

            在慢启阶段,当cwnd值超过慢启动阈值(ssthresh)后,慢启动过程结束,TCP连接进入拥塞避免阶段。在拥塞避免阶段,每一次发送的cwnd个报文段被完全确认后,才将cwnd值加1。在此阶段,cwnd值线性增加。

          (3)快速重传

            快速重传是对超时重传的改进。当源端收到对同一个报文的三个重复确认时,就确定一个报文段已经丢失,因此立刻重传丢失的报文段,而不必等到重传定时器(RTO)超时。以此减少不必要的等待时间。

          (4)快速恢复

            快速恢复是对丢失恢复机制的改进。在快速重传之后,不经过慢启动过程而直接进入拥塞避免阶段。每当快速重传后,置ssthresh=cwnd/2、cwnd=ssthresh+3。此后,每收到一个重复确认,将cwnd值加1,直至收到对丢失报文段和其后若干报文段的累积确认后,置cwnd=ssthresh,进入拥塞避免阶段。

            TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。

          TCP三次握手的过程如下:

          1. 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SENT状态。
          2. 服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
          3. 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。

          三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

            建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。具体过程如下所示。

          (1) 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。

          (2) 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。

          注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。

          (3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。

          (4) 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。

          既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。

          注意:

          (1) “通常”是指,某些情况下,步骤1的FIN随数据一起发送,另外,步骤2和步骤3发送的分节都出自执行被动关闭那一端,有可能被合并成一个分节。

          (2) 在步骤2与步骤3之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的,这称为“半关闭”(half-close)。

          (3) 当一个Unix进程无论自愿地(调用exit或从main函数返回)还是非自愿地(收到一个终止本进程的信号)终止时,所有打开的描述符都被关闭,这也导致仍然打开的任何TCP连接上也发出一个FIN。

            无论是客户还是服务器,任何一端都可以执行主动关闭。通常情况是,客户执行主动关闭,但是某些协议,例如,HTTP/1.0却由服务器执行主动关闭。[来自百度百科](TCP(传输控制协议)_百度百科 (baidu.com))

          最后

          推荐一个零声教育学习教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,

          fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,

          TCP/IP,协程,DPDK等技术内容,点击立即学习:链接

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]