第二章:传输层:TCP和UDP原理知识

本篇的焦点是TCP和UDP协议,能够提供足够的细节来理解如何使用这些协议

TCP/IP使用的协议IPv4、IPv6、TCP、UDP、ICMP、IGMP、ARP、RARP、ICMPv6、BPF、DLPI

BPF:BSD分组过滤器,他为进程提供直接访问数据链路层,一般在源自BerKeley的内核中中找到它。

DLPI数据链路提供的接口,这是直接能够访问数据链路层的接口

UDP用户数据报协议

每个数据报都有一定的长度,我们可以认为一个数据报就是一个记录,如果数据报最终正确的到达的话,数据报的长度直接传递给接收方的应用进程

TCP:传输控制协议

TCP有用于动态估算客户到服务器往返的时间RTT算法(round_trip_time),它知道等待一个数据报的确认的时间,rtt局域网是几毫秒,广域网则是数秒

TCP会把数据进行重组,根据是序列号

TCP会对流量进行控制,通告窗口就是告诉发送端,我接受端能够接受的能力,能够接受的大小

TCP是全双工的,可同时接受和发送

三次握手:

首先服务器socket bind listen函数来完成打开,这个行动叫做被动打开

客户端socket 之后connect服务器发生主动打开,这个数据报是SYN j –>server

服务器收到客户端的建立连接的信息后,发送,SYN k ACK j+1 ->client

客户端收到数据报德时候,发送确认数据报 ACK k+1->server完成三次握手


TCP的连接终止:

客户端向服务器发送了FIN数据报,表示client->server的数据发送完成了,现在我client想要结束连接(像分手一样直接),服务器收到该数据报的时候,知道客户端结束了,就不能再送客户端接受信息了(人家都说分手干嘛还要死皮赖脸,分吧),

这个仅仅是一方的信息说不能发送了(c->s)

如果服务器向客户端发送完成的时候,也会发送一个FIN数据报,表示,我也没什么事了,现在分手,之后,客户端收到这个消息之后,说,分就分,谁怕谁,呵呵,就这样套接口对就这样结束了(执行的api是close)


虽然TCP有许多优点(典型的好男人),但是呢,总会有负面印象,许多应用还是使用UDP的避免了TCP要建立连接和终止连接的额外开销

TIME_WAIT:

TIME_WAIT是IP数据报能在网骆中生存的最长时间,

存在TIME_WAIT状态的原因有两点①是保存fin数据报的ack信息,防止ACK数据报丢失,重发的时候能够认识现在状态是close状态,②就是TIME_WAIT 的时间是2*MSL,这样会使在网络上的重复数据报全部丢失(MSL的具体详细见上面),防止再次建立同样的套接口对的时候接受以前的重复数据报

端口号:0-1023是IANA分配和控制的,

1024-49151由IANA登记这些端口的使用情况

49151-65535(2的16次方)式临时端口

套接口对是包括 本地ip、本地TCP端口、远程IP、远程TCP端口

Api内核调用过程:当write发送数据的时候,先拷贝到socket的发送缓冲区,如果,该能够把数据完全拷贝到该缓冲区的话,write直接返回,表示socket缓冲区是可以使用的,如果不可以使用的话,就阻塞在那里(前提说的是阻塞socket)。对于删除socket缓冲区的内容是当这段发送的数据报收到ack确认数据报(另一端说,我收到数据报了,这段数据报可以删除了),关于发送的细节,就是装各种层的数据报头,其中可能会进行分片


最后周董出新歌了《皮影戏》,大家听听,蛮好听的,推荐


你可能感兴趣的:(第二章:传输层:TCP和UDP原理知识)