TCP:IP 协议栈基础

TCP/IP 协议栈

概念介绍:

  • Transmission Control Protocol/Internet Protocol 传输控制协议/英特网互联协议 TCP/IP是一个协议栈,包括TCP,IP,UDP,ICMP,RIP,FTP,SMTP,ARP,TELNET等许多协议 最早发源于美国国防部(DOD)的因特网的前身ARPA网项目,1983.1.1日,TCP/IP 取代了旧的网络控制协议NCP,成为今天的互联网和局域网的基石和标准,由互联网工程任务组负责和维护 OSI七层协议栈是世界标准协议,但企业中应用较多的是tcp/ip四层协议 共定义了四层,和ISO参考模型的分层对应关系
    • 应用层(dns,ftp...) 对应 OSI参考模型的上三层 及 应用层,表示层,会话层
    • 传输层(tcp,udp) 对应 传输层
    • 网络层(ip) 对应 网络层
    • 网络接口层 对应 数据链路层和物理层
graph LR; a((TCP/IP 四层协议)) ---对应--- b{OSI 七层协议} a1(应用层) ---对应--- b1(应用层/表示层/会话层) a2(传输层) ---对应--- b2(传输层) a3(网络层) ---对应--- b3(网络层) a4(网络接口层) ---对应--- b4(数据链路层/物理层)

七层协议图示

  • cat /etc/service 查看各种服务端口

  • 应用层:向用户提供一组常用的应用程序,比如电子邮件,文件传输访问,远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用协议来提供网络内机器间的文件拷贝功能。

  • 传输层:提供应用程序间的通信。其功能包括:

    • 1.格式化信息流;
    • 2.提供可靠传输。
    • 为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送
  • 网络层:负责相邻计算机之间通信。其功能包括三方面:

    • 1,处理来自传输层的分组发送要求,收到请求后,将分组装入IP数据报,填充报文头,选择去往目标主机路径,然后将数据报发往适当的网络接口。
    • 2,处理输入数据报:首先检查其合法性,然后进行寻径-假如该数据报已经到达目标主机,则去掉报文头,将剩下部分交给适当的传输协议;假如该数据未到达目标主机,则转发该数据报。
    • 3,处理路径,控流,拥塞等问题
  • 网络接口层:这是TCP/IP软件的最底层,负责接收ip数据报并通过网络发送之,或者从网络上接收物理帧,抽出ip数据报交给IP层

  • 应用层协议: 在传输层之上就是应用层。传输层的UDP报文和TCP报文段的数据部分就是应用层交付的数据。 DNS-53,FTP-20/21,SMTP-25,HTTP-80,HTPPS-443,RIP,NFS-2049,SNMP-25 Telnet-23,Tftp-69,

  • 传输层: tcp:面向连接,可靠的有顺序的连接协议;例如邮件 udp:不可靠的连接;例如:语音,视频通话,直播等

  • TCP特性:

    • 工作在传输层

    • 面向连接协议

    • 全双工协议(双向同时传数据)

    • 半关闭

    • 错误检查

    • 将数据打包成段,排序

    • 确认机制

    • 数据恢复,重传

    • 流量控制,滑动窗口

    • 拥塞控制,慢启动和拥塞避免算法

  • TCP包头:模拟结构,层层封装 (网络链路层首部封装(网络层首部封装(传输层封装(应用层)))) TCP协议 PORT 传输层通过port号,确定应用层协议

  • tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路;0-65535个端

  • udp:无连接的协议;0-65535个端口

  • IANA:互联网数字分配机构(负责域名,数字资源,协议分配)

    • 0-1023:系统端口或特权端口(仅管理员可用),众所周知,永久的分配给固定的系统应用使用
    • 1024-49151:用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用,
  • 49152-65535:动态端口或私有端口,客户端程序随机使用的端口 其范围的定义文件:/proc/sys/net/ipv4/ip_local_port_range

  • TCP三次握手 客户端/服务状态转换:

    • 客户端:closed----->syn-sent(同步已发送)---->estab-lished(以建立连接)
    • 服务端:closed---->listen---->syn-rcvd(同步收到)---->estab-lished
  • TCP四次挥手 客户端/服务端状态转换:

    • 客户端:estab-lished(建立状态)----> fin-wait-1(终止等待1) ----> fin-wait-2(终止等待2) ----> time-wait(等待2MSL 30s,时间等待) ----> closed
    • 服务端:estab-lished---->close-wait(关闭等待)---->last-ack(最后确认)---->closed
  • 有限状态机FSM:Finite State Machine (11种)

    • closed 没有任何连接的状态
    • listen 侦听状态,等待来自远方TCP端口的连接请求
    • syn-sent 在发送连接请求后,等待对方确认
    • syn-received 在收到和发送一个连接请求后,等待对方确认
    • established 代表传输连接建立,双方进入数据传送状态
    • fin-wait-1 主动关闭,主机已发送关闭连接请求,等待对方确认
    • fin-wait-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
    • time-wait 完成双向传输连接关闭,等待所有分组消失,一般2MSL为30s
    • close-wait 被动关闭,收到对方发来的关闭连接请求,并以确认
    • last-ack 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
    • closing 双方同时尝试关闭传输连接,等待对方确认
  • TCP超时重传

    • 1.异常网络状况下(开始出现超时或丢包),TCP控制数据传输以保证其承诺的可靠服务
    • 2.TCP服务必须能够重传超时时间内未收到确认的TCP报文段。为此,TCP模块为每个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动。如果超时时间内未收到接收方的应答,TCP模块将重传TCP报文段并重置定时器。至于下次重传的超时时间如何选择,以及最多执行多少次重传,就是TCP的重传策略
    • 3.与TCP超时重传相关的两个内核参数:
      • /proc/sys/net/ipv4/tcp_retries1,指定在底层IP接管之前TCP最少执行的重传次数,默认值是3
      • /proc/sys/net/ipv4/tcp_retries2,指定连接放弃前TCP最多可以执行的重传次数,默认值15(一般对应13-30min)
  • 网络层协议/Internet层

  • 网络层协议包括ip,icmp,ARP(地址解析协议ip地址解析为mac地址),RARP协议

  • Internet 层协议特征

    • 运行于OSI网络层
    • 面向无连接的协议
    • 独立处理数据包
    • 分层编址
    • 尽力而为传输
    • 无数据恢复功能
  • icmp协议:ping命令 设置禁止ping :echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_allicmp

  • arp协议:arping命令 例arping -I ens33 192.168.31.1(模拟arp发出广播,知道该IP地址的mac地址)

  • ARP协议:发出arp广播解析IP地址对应的mac地址,第一次成功通信后记录mac-ip对应关系到内存中,下次直接以单播通信

TCP 协议如何保证可靠传输

  1. 应用数据被分割成 TCP 认为最适合发送的数据块。
  2. TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
  3. 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
  4. TCP 的接收端会丢弃重复的数据。
  5. 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
  6. 拥塞控制: 当网络拥塞时,减少数据的发送。
  7. ARQ协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
  8. 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

三次握手--四次挥手--超时重传

  • 报文结构
udp、tcp报文结构
  • 三次握手

三次握手

  • 四次挥手

    四次挥手

  • 超时重传

    超时重传机制

面试题

  • 1.tcp和udp的区别
    • 答:tcp是面向连接的,可靠的,基于字节流的传输层协议。而udp是一个面向无连接的协议,tcp是有状态的可控制的具备重传功能的协议
  • 2.tcp的三次握手和四次挥手的主机状态
    • 同上
  • 3.为什么不是两次握手?
    • 答:缺少第三次握手会使服务端无法确认客户端的接收能力
  • 4.为什么不是四次握手?
    • 答:三次足够确认状态,再多也可以就是多余
  • 5.第三次握手中可以携带数据吗?
    • 答:第三次握手时可以携带数据,前两次不能携带。第三次握手时客户端已经处于established状态,并且已经能够确认服务器的接收,发送能力正常,这个时候相对安全,可以携带数据
  • 6.四次挥手时等待2MSL的意义?
    • 答:如果不等待,客户端直接跑路,当服务器还有很多数据包要给客户端,并且已经在路上的时候,之前客户端请求端口被其他应用占有后会接收到此无用数据,会造成数据包混乱。
  • 7.为什么不是1MSL而是2MSL?
    • 答:一个MSL确保四次挥手中主动关闭方最后的ACK报文能够到达对方,一个MSL确保对端没有收到ACK重传的FIN报文可以最终到达对端,这就是2MSL的意义。
  • 8.为什么不是三次挥手?
    • 答:因为服务端接收到FIN后不会立即返回FIN,必须要等服务器端的所有报文发送完之后才会发送。因此第二次挥手代表已经接收到FIN报文,延迟一段时间才会主动发FIN报文,因此造成4次挥手。 如果是三次挥手呢?等于说服务端将ACK和FIN的发送合并为一次挥手,这个时候长时间的延迟会导致客户端误以为FIN为接收,会不断进行重试
posted @ 2025-07-10 10:36  星河霓虹  阅读(75)  评论(0)    收藏  举报