TCP与UDP

二三层网络传输

截屏2020-07-24 下午3.17.54.png

TCP

TCP需要关注的5个问题

  • 顺序问题
  • 丢包问题
  • 连接维护
  • 流量控制
  • 拥塞控制

TCP头文件,相应的UDP头文件只有源端口号与目的端口号字段


TCP头文件

TCP三次握手

[wireshark抓包分析(可进一步了解序号和确认号等问题)]
(https://sq.163yun.com/blog/article/193066493804396544?tag=M_tg_144_70)

SYN-SENT.png

说明:
SYN:建立连接请求
FIN:断开连接请求
ACK:应答
LISTEN:服务端处于主动监听的状态
SYN-SENT:连接请求已发送
SYN-RCVD:连接请求已收到

相关问题:
1、为什么需要3次握手?两次不行?(主要第二点)

  • B收到请求之后不确定自己发送的应答能否达到A(需要一去一回),因此B不能建立连接,两次握手A是可以建立连接;
  • 复杂情况下,A发送了多次SYN请求才与B建立连接,连接短暂时间断开之后,A之前重复发送的请求到达B,如果两次握手的话,会使得B单向连接,单相思,耗费B的资源。三次握手时,第三次失败,A已建立连接,B未建立连接,似乎也有同样的问题,但是A给B发送数据的时候,B会自动建立连接了。
  • 3次握手除了解决连接问题外,还要解决TCP包序号的问题,即数据传输的时候,数据包的起始序号,序号是每过4ms加1。序号不能从1开始,要确保包序号的唯一性,数据传输是按序号接收的,防止绕远路包序号混淆。

四次挥手

ESTABLISHED.png

名字解释

  • 2MSL:MSL是Maximum Segment Lifetime,报文最大生存时间,IP包中有个TTL域,可以经过的最大路由器数,没经过一个减一,为0时丢弃
  • 第二步ASK之后,A已经断开连接不能向B发送数据,反过来是可以的
  • SYN=1,FIN=1不携带数据,需要消耗掉一个序号。ACK=1可以携带数据,不携带的话不消耗序号

相关问题:
1.为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

  • 如果A收到FIN,发送ACK后马上CLOSED,最后的ACK有可能失败,超时MSL后B会重新发送个FIN给A,此时A就没法回复ACK了。2MSL是第4步加上第三步重发的时间上限,保证可以重发一次,然后A重启2MSL计时器
  • 第三步B多次重发FIN时,由于A已经关闭了,这个端口号可能给其他应用使用了,后面重发的FIN有可能连接到其他应用产生混乱(虽然有包序号做了一层保险)

2、为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

  • B在收到FIN时,有可能在处理数据发送,先发一个ACK应答,处理完再发送FIN

流量控制

根据接收方的窗口大小调整发送方的窗口,TCP头文件中有个窗口大小的字段。

接收方
  • MaxRcvBuffer:最大缓存的量是一个固定的值
  • 接收已确认:表示应用层还未读取的数据
  • 等待接收未确认:就是窗口的大小
    当应用层长时间未读取数据时,接收已确认部分空间扩大,相应导致等待接收未确认部分即接收窗口变小,接收端会在ack的头文件中附带变小的窗口大小字段,让发送端缩小发送窗口。
发送方
窗口控制流程

在以上图示中,接收端6,7有可能会接收失败,假设6接收成功7接收失败,发送端有3种处理重传的方式:

  • 超时重试:如果发送端发送7超过往返的RTT(不断变化的平均值)时间仍然没有收到ACK,发送端就会超时重传一次,如果仍然没有收到,将超时时间设为原来的两倍。存在的问题是超时时间太长,用户等待太久。
  • 快速重传:当接收方收到的序号大于期待的序号时,8比7提前到达,接收方判断7已经丢失,于是在超时重试之前6发送3个冗余的ack,通知发送端重新发送7.
  • Selective Acknowledgment (SACK):将缓存地图发送给对方,例如发送ACK6、SACK8、SACK9,可以判断7丢失了

MSL、TTL及RTT的区别

拥塞控制

截屏2020-07-24 下午4.16.27.png

LastByteSent - LastByteAcked <= min {cwnd(拥塞窗口), rwnd(滑动窗口)} ,cwnd与rwnd共同控制发送速度。
一开始TCP连接时,cwnd(拥塞窗口)会指数级增长,到达上限值 ssthresh时,cwnd变成每次加1的线性增长,当出现丢包需要超时重传的现象时,就认为网络已经拥塞了,此时有3种处理方式:

  • 超时重传:将 sshresh 设为 cwnd/2,将 cwnd 设为 1,重新开始慢启动。从高速传输马上停下来,会造成网络卡顿
  • 快速重传算法:当发现中间的一个包丢失时,发送前一个包的3次ACK,要求快速重传,cwnd 减半为 cwnd/2,然后 sshthresh = cwnd。cwnd保持线性增长
  • TCP BBR 拥塞算法:以上算法还存在两个问题,1.丢包不一定是满了,还有其他原因导致丢包。2.填满了路由的缓存才会出现丢包。BBR算法不是通过丢包的现象来判断是否拥塞,会找到一个平衡点,充满管子就表示拥塞了,而不必充满缓存


    截屏2020-07-24 下午4.37.46.png
截屏2020-07-24 下午4.37.57.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352