TCP/IP协议:
Transmission Control Protocol(传输控制协议)/Internet Protocol(因特网互联协议)的简写。
常见的协议所在OSI层和功能:
TCP协议:
建立连接(三次握手)过程:
(1):客户端发送SYN(SEQ=x)给服务器端,进入SYN_SEND状态。
(2):服务器端收到客服端的SYN报文,回复SYN(SEQ=y,ACK=x+1)报文,进入SYN_REVD状态。
(3):客户端收到服务器端的SYN报文,回应(SEQ=x+1,ACK=y+1)报文,进入Established状态。
这样三次握手完成,TCP客户端和服务器端成功建立连接,可以开始传输数据了。
特点:
没有应用层的数据
SYN这个标志位只有在TCP建产连接时才会被置1
握手完成后SYN标志位被置0
SYN这个标志位只有在TCP建产连接时才会被置1
握手完成后SYN标志位被置0
图释:
断开连接(四次挥手)过程:
建立连接需要三次握手,断开连接需要四次挥手,这是由于TCP的半关闭导致的。
(1):某个应用进程首先调用close,称该端执行“主动关闭”。于是该端的TCP发送一个FIN分节,表示数据传输完毕。
(2):接收到FIN的对端,执行“被动关闭”,这个FIN有TCP确认。(FIN的接收也作为文件结束符传给接收端的应用程序,放在已排队等候该进程接收的其他数据之后,FIN的接收意味着接收端应用进程在该连接上再无额外数据接收)。
(3):一段时间过后,接收到文件结束符的应用进程将调用close关闭它的套接字,这导致它的TCP也发一个FIN。
(4):“主动关闭”端的TCP确认这个FIN。
由TCP的三次握手和四次断开可以看出:
TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础。
图释:
名词解释:
ACK 确认字符TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号之前的数据段都收到了.比如,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性。
SYN 同步序列号,TCP建立连接时将这个位置1。
FIN TCP报头的码位字段,该位置为1的含义为发送方传输完毕,用于关闭连接。
TCP的包头结构:
源端口 16位
目标端口 16位
序列号 32位
回应序号 32位
TCP头长度 4位
reserved 6位
控制代码 6位
窗口大小 16位
偏移量 16位
校验和 16位
选项 32位(可选)
这样我们得出了TCP包头的最小长度,为20字节。
UDP协议:
UDP(User Datagram Protocol)是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
特性:
(1):UDP是一个非连接的协议,传输数据之前源端和终端不建立连接。在发送端,UDP传送数据的速度仅受应用程序产生数据的速度、计算机能力、宽带的限制。在接受端,UDP把每个信息放入队列中,应用程序每次读取一个信息段。
(2):由于传输信息不需要建立连接,所以不用维护连接状态,包括收发状态等。所以一台服务器可以同时向多台客户机发送相同的信息。
(3):UDP信息包的标题短,只有八个字节,相比TCP的20个字节,开销少。
(4):吞吐量不受拥挤算法的影响,只受
用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
(5):UDP不保证可靠交互,因此主机不需要维护复杂的链接状态表。
(6):UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
UDP的包头结构:
源端口 16位
目的端口 16位
长度 16位
校验和 16位
源端口 16位
目的端口 16位
长度 16位
校验和 16位