网络小结(2)——TCP/UDP

正文

1. TCP与UDP:

在网络体系结构中我们提过TCP/IP的四层网络层级:


image.png

而TCP(Transmisson Control Protocol,即传输控制协议)和UDP(User Datagram Protocol 即用户数据报协议)是在传输层的,所以我们知道UDP和TCP是用来传输数据的一种协议,为主机中不同进程提供通信,那既然是传输数据,我们举例以快递盒寄信的逻辑来说明。

TCP像快递,寄快递现在都有物流信息,最后是否签收了我的快递。如果丢件也会通知给你反馈。而UDP更像寄信,收不收得到我也不管。

对比与UDP,TCP的传输是可靠的、无差错的。

1.1 TCP通道的连接及断开

既然数据是从一个地方到另一个地方,我们要先建立一个通道,这样数据才能传输流动。

TCP三次握手,四次挥手,这个就是用来建立这个通道及断开通道。

三次握手:

  1. A发信息给B:你在不在啊?急事!!
  2. B发信息给A:我在啊,急事?那你快告诉我,我这边时刻听着你说。

不幸的是A这时候拉肚子,只能马上跑去厕所了,然后一拉就是半个小时,然后B就一直等了半个小时。

这时候你是不是发现了二次握手的问题了,如果第二次B发送给A的话后,A没有马上回相应的信息给B,B就可以认为A已经不在了,从而不再等它,也不建立通道。

所以应该是这样:

  1. A发信息给B:你在不在啊?急事!!
  2. B发信息给A:我在啊,急事?那你快告诉我,我这边时刻听着你说。
  3. A发信息给B:事情是这样的。你听我慢慢道来。
    balabala.......
    balabala.......
    balabala.......

然后A和B之间的通道就通了,然后A这时候可以给B不停的发信息了。

然后有人会问,TCP 又不会拉肚子,那TCP为啥要三次,因为如果规定二次的话: A 发给B信息,申请建立通道,因为网络延迟,B一直没收到,这时候A等的不耐烦了,直接就退出了,但是过了一会儿B收到了这个信息,B以为A是刚发的请求,所以建立了通道,但是A其实早就已经不在了。这样防止B形成死锁、浪费资源等。

当然上面是我们举得例子,具体肯定是通过一些值来传递:具体的图是这样的:

image.png
image.png

四次挥手

我们知道TCP连接之后我们可以互相之间发消息了,这里假设通道里包含了两个小通道,一个是A发给B的,一个是B发给A的,这样当我们断开连接的时候有两大步。

  1. 断开A发给B信息的通道
  2. 断开B发给A信息的通道

我们先看断开A发给B信息的通道:

A发信息给B:我累了,我先睡了,88.
B发信息给A:好的,那你先睡吧。

这时候A就睡觉了,A也不会发信息给B了。但是这时候B还是可以继续给A发信息,B可能深夜突然来个深情告白

B发信息给A: 其实我XXXXXXXX。

所以单纯二次挥手是不够的,还要断开B发给A信息的通道:

B发信息给A:不过你说你要睡了,我觉得是比较晚了,我也要睡了,晚安。
A发信息给B: 那你也早点睡。晚安

所以连在一起是:

A发信息给B:我累了,我先睡了,88.
B发信息给A:好的,那你先睡吧
B发信息给A:不过你说你要睡了,我觉得是比较晚了,我也要睡了,晚安。
A发信息给B: 那你也早点睡。晚安

刚开始是双向通信,然后二次挥手后,A到B的断了,所以这时候变成单向的数据传输,然后再二次挥手,把这个单向数据传输也关闭。

image.png
image.png

所以我们看到了TCP的连接和断开都这么多步,多次确认等操作,但是UDP是不需要先建立一个稳定的通道,直接就把数据发过去了。所以UDP更快,因为不用先去建立连接。

1.2 TCP的无差错传输

TCP为什么传输安全,UDP传输不安全,TCP传输保证了数据最终能稳定安全的到达目的地,而UDP只管发送出去,不管最终是否收到,具体原因是为啥?

发送端

对于发送端:每收到一个确认帧,发送窗口就向前滑动一个帧的距离。当发送窗口内无可发送帧时(即窗口内的帧全是已发送但未收到确认的帧),发送方就会停止发送,直到接收方发送确认帧使窗口移动,窗口内有可以发送的帧,之后才继续发送 具体如下图:


image.png

接收端:

对于接收端:当收到数据帧后,将窗口向前移动一个位置,并发回确认帧,若收到的数据帧落在接收窗口之外,则一律丢弃。

image.png

滑动窗口协议的重要特性

  • 只有接收窗口向前滑动、接收方发送了确认帧时,发送窗口才有可能(只有发送方收到确认帧)向前滑动
  • 停止-等待协议、后退N帧协议 & 选择重传协议只是在发送窗口大小和接收窗口大小上有差异。

1.停止等待协议:发送窗口大小=1,接收窗口大小=1;即 单帧滑动窗口 等于 停止-等待协议
2.后退N帧协议:发送窗口大小>1,接收窗口大小=1。
3.选择重传协议:发送窗口大小>1,接收窗口大小>1。

  • 当接收窗口的大小为1时,可保证帧有序接收。
  • 数据链路层的滑动窗口协议中,窗口的大小在传输过程中是固定的(注意要与TCP的滑动窗口协议区别)

1.3 TCP与 UDP 区别

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

推荐阅读更多精彩内容

  • 介于自己的网络方面知识烂的一塌糊涂,所以准备写相关网络的文章,但是考虑全部写在一篇太长了,所以分开写,希望大家能仔...
    青蛙要fly阅读 471评论 0 2
  • 目录 TCP协议的基本概念面向链接的服务可靠的服务序列号字节流传输 TCP协议数据段的格式TCP伪头部 TCP协议...
    kirito_song阅读 2,951评论 2 33
  • 1、TCP为什么需要3次握手,4次断开? “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端...
    杰伦哎呦哎呦阅读 3,470评论 0 6
  • 传输层提供的服务 传输层的功能 从通信和信息处理的角度看 ,传输层向它上面的应用层提供通信服务,它属于面向通信部分...
    CodeKing2017阅读 3,594评论 1 9
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,034评论 6 174