TCP、UDP协议

前言:

网络世界很大,里面大大小小的协议很多。因为我们不是专业的网络人员,所以我们没有必要把每个协议都搞清楚。我认为对于不同的协议我们需要了解的深度也不同。比如ARP、RARP、IMCP,这些协议其实我们只需要知道他是干什么的基本上就足够了。但是对于TCP这种协议我认为我们还是需要更加深入了解一下简单的流程。但是比如像数据报的格式这样的东西我认为如果有需要的我们有必要去查阅一下相关资料,否则也没必要去死扣数据报格式。再往上说,对于HTTP、HTTPS这样的协议就需要我们对具体的实现以及报文的格式有一定的了解。

ARP:地址解析协议  就是把IP解析为Mac地址的协议。

NARP:逆向地址解析协议,Mac地址解析为IP.

IMCP:工作在ip层的协议,当ip层的数据传输错误的时候,发送错误给用户进程。

1.TCP、UDP协议

TCP协议是一种可靠地,面向连接的传输协议。而UDP正好和TCP相反。

面向连接指的是TCP协议在双方发送数据之前必须发起三次握手建立连接,但是UDP协议并不需要建立连接。

可靠指的是TCP协议可以确保你发送的数据报是按照顺序的,可以安全无损的发送给对方。但是UDP并不会对这些进行保证。

原因是通过TCP建立起来的socket会有一个发送缓冲区和接收缓冲区。但是UDP协议建立起来的socket只有一个接收缓冲区。

TCP在发送数据的时候,会先发起三次握手建立连接,发送数据报之后,接受到对方的ack之后才会把发送缓冲区的这部分报文清除。如果超时或者对方接收的不完整,会触发重发机制。但是UDP不论如何发送出去的数据都会被立即丢弃。

另外在TCP在握手的时候还会确立两个值,一个是滑动窗口(MWS)的大小,另一个是最大发送的数据包(MSS)的大小。具体这两个名词的含义可以在https://www.cnblogs.com/mengwang024/p/4425834.html 这篇文章里面看,里面介绍的很详细。简单可以理解滑动窗口为接收缓冲区的大小,MSS是每次发送的TCP数据报里面数据区的最大大小。TCP会根据这两个值确定发送的速率和每次发送的数据包的大小。

2.TCP里面常见的六个标识比特

这六个标识比特是在TCP首部出现的。

1)URG 紧急指针有效。

2)ACK 确认序号有效。

3)PSH 接收方应该尽快将这个报文段交给应用层。

4)RST 重建连接。

5)SYN 同步序号用来发起一个连接。

6)FIN 发端完成发送任务

3.TCP里面的三次握手

TCP、UDP协议

大家可以使用wireshark抓包工具看一下。有助于快速理解。主要就是SYN ACK标识比特和sequence和acknowledge这两个标识符的变化。

4.TCP四次挥手

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

TCP、UDP协议