TCP-IP 知识点

TCP-IP协议分层 和 OSI协议分层

先说下OSI分层中比较重要的层

数据链路层

  • 为IP模块发送和接收IP数据报。
  • 为ARP模块发送ARP请求和接收ARP应答。
  • 为RARP发送RARP请 求和接收RARP应答。
    ARP叫做地址解析协议,是用IP地址换MAC地址的一种协议,而RARP则叫做逆地址解析协议(在局域网中用ARP协议可以很容易使网络瘫痪)

TCP-IP分层

网络接口层

在TCP/IP协议簇中,链路层的协议比较多,它决定了网络形态,但很多都不是专门为TCP/IP设计的。常用的链路层协议包括:以太网协议、PPP协议、帧中继协议、ATM等。

网络层

处理分组在网络中的活动,在底层通信网络的基础上,完成路由、寻径功能,提供主机到主机的连接。IP是尽力传送的、不可靠的协议。在TCP/IP协议簇中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互连网控制报文协议),ARP/RARP(地址解析/反向地址解析协议),以及IGMP协议(Internet组管理协议)。

分组交换

指将较大的数据分割成若干较小的数据,然后依次发送。使用分组交换的原因是每一种数据链路层协议,都有一个最大传输单元(MTU:Maximum Transmission Unit)定义,在这个定义下面,如果IP数据报过大,则要进行分片(fragmentation),使得每片都小于MTU

传输层

主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议簇中,有两个不同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议),它们分别承载不同的应用。TCP协议提供可靠的服务,UDP协议提供不可靠但是高效的服务。

应用层

这一层负责具体的应用,比如HTTP访问、FTP文件传输、SMTP/POP3邮件处理等等。几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序:远程登录(Telnet)、文件传输协议(FTP)、简单邮件传输协议(SMTP)、简单网络管理协议(SNMP)。

TCP三次握手/四次挥手

TCP是面向连接的传输层协议,所谓面向连接就是在真正的数据传输开始前要完成连接建立的过程,否则不会进入真正的数据传输阶段。
TCP的连接建立过程通常被称为三次握手(three-way handshake),过程如下:

  • 请求端(客户端)发送一个SYN段指明客户端打算连接的服务器的端口,以及初始序号(ISN)。这个SYN段为报文段1。
  • 服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。
  • 客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认(报文段3)。

这三个报文段完成连接的建立。

问题1:为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

问题2:为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,又可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。