运输层协议 TCP

UDP

面向报文的不可靠,无连接的协议。
udp的报文头:
源端口,目的端口,长度,校验和 总共4个字节。

TCP

TCP报文头部:
源端口,目的端口,序列号,确认号,接收窗口,首部长度,校验和等。

一TCP如何保证可靠传输
1)序列号/确认应答

答:每个报文都会有一个序列号(seq),ACK确认则是序列号+1
2)超时重传
答:每发送一个报文就启动一个计时器,
3)滑动窗口&&流量控制
答:窗口的大小就是在无需等待确认包的情况下,发送端还能发送的最大数据量。这个机制的实现就是使用了大量的缓冲区,通过对多个段进行确认应答的功能。通过下一次的确认包可以判断接收端是否已经接收到了数据,如果已经接收了就从缓冲区里面删除数据。
在窗口之外的数据就是还未发送的和对端已经收到的数据。那么发送端是怎么样判断接收端有没有接收到数据呢?或者怎么知道需要重发的数据有哪些呢?通过下面这个图就知道了。
在这里插入图片描述如上图,接收端在没有收到自己所期望的序列号数据之前,会对之前的数据进行重复确认。发送端在收到某个应答包之后,又连续3次收到同样的应答包,则数据已经丢失了,需要重发。
当接受方的缓存满了以后,发送发还会继续放松一个字节的报文,告诉接受方来清空缓存。
4)拥塞控制
名词解释:
1.慢开始 :最开始的cwnd是1.每次乘2开始递增。当放生超时重传的时候cwnd变为1,阈值减半
2.拥塞避免:当cwnd=阈值的时候,cwnd每次增加1开始拥塞避免
3.快重传:当收到3个相同的ACK就不用等到超时重传,直接发送响应的包
4.快恢复:当发生快重传的时候,就不用进入慢开始而是阈值减半,直接进入拥塞避免。

1)问:如何解决包失序问题?
答:接受方会先缓存已经到达的数据,如果缓存已满则丢弃数据包,进行超时重传。
2)问:TCP连接为什么是3次握手
答:1为了建立可靠的双向连接
2由于网络的传输是不稳定的,2次连接还可能导致脏连接即之前没有到达的SYN包,断开连接的时候再次到达就会创建脏连接,
3)问:如果发送端发送完SYN后挂起怎么办(即TCP泛洪攻击)。
答:在server端是会进行5次超时重传才会断开连接的。
(1)缩短SYN timeout时间,通过参数tcp_synack_retries
(2)设置SYN cookie
4)问:如果客户端突然挂了,怎么办
答:服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
5)问:TCP断开为什么是4次挥手
答:由于服务端还有数据要发送不会立即进入关闭状态,所以接受到FIN包的时候回发送一次ACK让Client端进入CloseWait2.
6)问:什么是TIME_WAIT,为什么TIME_WAIT长度是2*MSL
答:1保证最后一次ACK一定送到
2保证本次的所有的报文都消失。
7)问:有大量的TIME_WAIT状态该如何解决。
答:只有在主动关闭方才会有这个问题,修改time_wait的时间
开启重用和快速回收
8)问:浏览器输入一个URL的过程
答:1URL解析并访问缓存。缓存命中则返回,否则继续
2DNS查询。把域名转换成IP地址
3TCP3次连接。TCP层把http的数据包封装成TCP报文
4 IP层把TCP
9)问:tcp的最大并发数
答:唯一确定一个连接是一个4元组,即最大的是2的(32+16)次方。
10)问:什么是粘包,分包
答:UDP是基于报文的,报文首部有报文长度,TCP是基于字节流的,没有长度这个字段。
假设客户端分别发送了两个数据包D1和D2给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下4种情况。
服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有粘包和拆包;
服务端一次接收到了两个数据包,D1和D2粘合在一起,被称为TCP粘包;
服务端分两次读取到了两个数据包,第一次读取到了完整的D1包和D2包的部分内容,第二次读取到了D2包的剩余内容,这被称为TCP拆包;
服务端分两次读取到了两个数据包,第一次读取到了D1包的部分内容D1_1,第二次读取到了D1包的剩余内容D1_2和D2包的整包。
11)问:如何使UDP稳定传输
答:所谓的可靠,1尽力可靠,2有序可靠,3无序可靠,比如我们要实现ACK和窗口。

12)问:UDP最大能传输多少字节:
UDP长度是16位 即2^16-1-8-20,但是网络中最大MTU是576字节 所以最大是576-8-20;

13)问:确认ACK是里面发送嘛
答:不一定的,TCP里面采用延时ACK,等下一个回复数据包一起发送,提高吞吐率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值