1. 传输层的作用
在传输层中有两个特别重要的协议 TCP/UDP .
以快递员送快递为例说明这个问题吧. 在进行包裹传输的过程中快递员需要根据快递上的目的地址(目的计算机)来投递包裹(IP数据报), 加入在快递单上只写了收件人的所在地, 所在单位, 而只写了收件人的姓没有写收件人的名字, 此时包裹(数据报)就不知道应该发送给谁, 因此在进行包裹收发的过程中必须写上收件的详细名字(应用程序), 此时的收件人的名字就相当于端口号.因此端口号是用来表示一个主机上进行通信的不同应用程序的编号. 其中 IP 数据报分为源 IP 目的 IP 源端口号 目的端口号以及有效载荷
2. 通信处理
TCP / IP 的众多应用程序都是以客户端服务器端进行运行. 其中 的客户端相当于客户, 而服务器端是用来提供服务的. 作为服务器端的程序必须要先启动随时等待客户的接入. 其中的服务进程都是守护进程. 在确认一个请求究竟是那个服务端发来的, 此时可以通过收到数据报的端口号进行判断.
3. 两种协议 TCP/UDP
(1)TCP
TCP是面向连接有可靠性的面向字节流的协议. 其中的字节流表示数据在发送的时候一次可以发送一个数据报, 也可以一次发送10个数据报, 接收数据报的时候一次可以接收1个也可以接收10个. 即数据在接收和发送的时候的数目是一个位置数, 完全由操作系统决定. 但是TCP实行”顺序控制”, “重发控制”机制同时也涉及”流量控制”, “拥塞控制”
(2)UDP
UDP 是不具有可靠性传输的数据报协议. 它会将细微的处理交给上层的应用层完成. 在 UDP 的情况下, 虽然可以保证发送消息的大小, 但是不能保证消息一定会到达. 如果出错会进行重发处理.
4. TCP 与 UDP 的区分
TCP 用于传输层有必要实现可靠性传输的情况下. 但是 UDP 虽然不可靠但是可以用于那些高速传播的情况下. 比如当我们在看视频的过程中如果出现数据报的丢失, 那么也将会一小部分的数据报, 如果进行重传, 那么客户在观看视屏的过程中无非就会出现等待时间过长的情况, 此时就需要用 UDP 进行传输.
5. TCP 的特点及其目的
为了实现数据的可靠性传输, 因此在进行数据的传输过程中就必须考虑数据的丢包, 破坏, 重复以及数据的分片顺序等等, 因此 TCP 通过检验和, 序列号, 确认应答, 重发机制, 连接管理以及窗口控制等实现可靠性传输
(1) 通过序号确认序号实现可靠性传输
在进行数据的收发过程中, 发送方会将数据发送给接收方, 当接收方接收到数据后会给发送方发送一个确认应答信号代表自己已经接收到数据, 反之, 当发送方发送数据后, 经过一段时间后还没有接受到对方的确认应答信号, 此时发送方会认为接受方没有接收到数据, 因此会将数据进行重发直到收到接受方的确认应答信号. 但是有的时候会出现这种情况, 接受方接受到了发送方给自己发送来的数据, 因此接收方给发送方发送了一个确认信号, 但是此时由于信号在传输的过程中丢了, 此时发送方也得不到接收方的确认应答信号, 因此发送方会不断将数据进行发送, 此时接收方就会收到大量的无用的重复数据报, 此时为了给上层提供可靠的数据, 此时接收方就需要扔掉大量的重复数据报, 为了接收方能够确认自己是否收到重复数据报, 以及自己是否需要接受发送方发送来的数据报, 此时就引入了序列号. 接收方可以通过序列号判断出自己是否收到了重复数据报, 同时当数据报过大的时候发送方会将数据报进行分组, 为了接收方能够正确地将这些分组进行正确组装, 接收方可以通过序列号来正确对数据报进行组装.
(2)重发超时
重发超时指的是在重发数据之前发送方等待接收方确认应答信号到来的特定时间间隔. 当发送方在等待这段时间之后还没有接收到接受方的确认应答信号的时候, 此时就需要重新进行数据报的发送.
(3)TCP 以段为单位发送数据
在进行建立连接的同时就已经确定了数据报的单位, 在进行发送的时候, 为了防止在发送的时候对其进行分片和组装, TCP 在发送的过程中最理想的情况就是发送数据报的时候发送数据报的长度正好我是 IP 数据报不会被分组的最大长度, 这个长度就叫做最大消息长度. 在进行三次握手的时候, 两个主机会将自己可以处理的最大消息长度写入到 MSS 选项, 高速对方自己能够容纳的最大消息长度.
(4) 利用窗口控制提高速度
在之前的数据收发过程中发送方发送一个数据报必须等到收到接受方的确认信号后才能进行发送第二个数据报, 这样显然就降低了双方之间的通信效率, 此时为了提高双方之间的数据传输效率, 此时就给双方定义一个缓冲区, 在接受方缓冲取未满的情况下, 发送方可以无须等到接受方的确认应答信号才发送数据, 发送方可以一次发送一大批的数据. 此时就会引入窗口这个名词, 即窗口的大小无非就是发送方无须等待确认应答一次所能继续发送数据的最的值.
(5)滑动窗口
正如上图所示, 透明地方就是滑动窗口, 在窗口左边代表的是已经收到接受方应答的信号, 窗口内部代表的是对方接受缓冲区的大小, 也是已经发送的数据报但是没有接受到应答的数据报, 窗口右边代表的则是还没有发送的数据报.
(6)窗口控制和重发控制
1)确认信号丢失
在为使用窗口机制的时候, 此时必须等到确认信号到达之后才能进行再次的发送数据. 担当引入窗口机制的时候, 此时发送方没有收到接收方的确认应答的时候, 此时由于引入了窗口机制,
发送方可以继续进行发送, 这是就不需要进行重发.
在收到 ACK 信号的时候窗口会自动向右滑动, 操作系统为了实现这个窗口, 在底层是以缓冲区的形式来维护这个窗口, 只有确认应答过的数据才能从窗口中, 即缓冲区中删除.
2)数据报丢失
当在数据进行发送的过程中发送的数据报出现丢失时, 此时接收方会给发送端发送重复的确认信号, 这个确认信号仿佛就是在提醒发送方我要收的数据是 XXX 信号, 此时发送方一旦接受到超过连续的相同的确认应答信号时, 此时它就会认为自己发送的数据丢失, 此时就会引发重传机制.
(7)流量控制
TCP 引入让发送端根据接收端接受能力的大小确认一次发送的最大数据报的数据量, 这就是流量控制.具体表现在当双方在建立连接的时候接收方会告诉发送方自己一次可以接收数据的最大量, 这个量的大小就是对方的接受缓冲区的大小, 也就是对方窗口的大小.于是发送方在发送的时候都会发送一个不超过接受方窗口大小的主句量给对方, 使得对方可以接收.当接受方接受到这个数据时, 此时的窗口会立即设置为一个更小的窗口告诉发送方目前自己可以接收的最大数据量.于是双方就形成了 TCP 的流量控制