TCP与UDP区别

区别:

  1. tcp面向连接的,可靠性高;udp无连接的,可靠性较低
  2. tcp是连接的通信,需要有三次握手、四次挥手等过程,会有延时,实时性差;udp无连接,因而实时性较强;
  3. tcp连接只能是点到点的;udp支持一对一、一对多、多对一、多对多的交互通信。

因而,在应用方面,对实时性要求高和高速传输的场合下需要使用udp,传输大量数据且对可靠性要求高的情况下应该使用tcp。

TCP三个阶段(TCP是全双工):

  1. 连接建立
  2. 数据传送
  3. 连接释放

三次握手

  1. 客户端发送一个tcp的syn标志位置为1的包(连接请求),指明客户打算连接的服务器的端口

    即“A给B打电话说,你可以听到我说话吗?”

  2. 服务端收到请求,返回syn和ack标志位同时致为1(授予连接)的确认包,并为这次连接分配资源

    即“B收到了A的信息,然后对A说:我可以听得到你说话啊,你能听得到我说话吗?”

  3. 客户端确认连接,发送确认包(syn为0,ack为1

    即“A收到了B的信息,然后说可以的,我要给你发信息啦!”

四次挥手:

中断连接端可以是客户端也可以是服务端

假设是客户端发起的中断连接请求,

  1. 客户端发送fin报文
  2. 服务端接收到fin报文后,意思是说:“客户端已经没有数据要发送给你了”,但是,如果此时服务端有数据未发送完成,则不必着急关闭socket,可以继续发送数据,所以服务端先发送ack,告诉客户端“收到了客户端刚才的关闭连接请求,但是服务端还有数据没发送,所以请客户端继续等我的消息”
  3. 此时客户端就进入了++fin_wait状态++,等待服务端的fin报文
  4. 服务端完成工作后,向客户端发送fin报文,告诉客户端已经发送完数据,可以关闭连接了
  5. 客户端接收到服务端的fin报文,就知道可以关闭连接了,但是还是不相信网络,怕服务端不知道要关闭,所以客户端发送ack给服务端后进入了++time_wait状态++,如果服务端没有收到ack则可以重传
  6. 服务端收到ack后,就知道可以关闭连接了,或者等待了2ms后依然没有收到回复,则证明服务端已经正常关闭了,此时客户端也会关闭连接

就这样,tcp连接就完成了关闭。

为何TCP建立连接是三个交互,不能只有两次吗?亦或者为何不是四次?

  • 只有两次的情况

    可能性只会发生在去掉最后一次,而最后一次ACK响应的重要性在于使得服务端确认了客户端能接收到信息,确认连接是正确建立的。

    在没有最后一次连接的情况下,会导致这么一种情况,客户端A发出连接请求,此时请求报文丢失而未等到确认。于是A再次重传了连接请求,建立了连接。数据传输完毕后,释放了连接。假设第一个请求只是因为网路节点长时间滞留了,使得它在第二个连接释放后才到达B服务器,那么B会以为这是一个新的连接请求,于是就向A发了个连接确认,但这时候需要注意了:由于没有最后一次的确认B会一厢情愿的以为连接已经建立,可A一看那个B发送的报文并不明白这是什么,会直接丢掉。但B却还一直等着A给他发数据,就这样B浪费了资源

    不过实际情况不是如此的,B也不会一直等着,因为有保活定时器

  • 有四次的情况

    这个道理很显然,既然3次双方都已经确认了连接可行并且是期望的,第4次显然是浪费了资源

四次挥手为何要有TIME_WAIT的状态

  1. 保证最后一个的一个ACK报文能到达服务端B(B 被动关闭的一方)。这个ACK报文有可能丢失,因而使得处在LAST_ACK状态得不到对已发送的FIN+ACK报文的确认,B会超时重传这个FIN+ACk(LAST_ACK状态下是会有超时重传的),而A就能在这TIME_WAIT时间(2MSL)里收到这个重传的报文,A就可以重传一次确认,如果没有这个TIME_WAIT,那B重传的FIN_ACK,可A早就走了,自然不会再重发确认,这样B就无法按照正常步骤进入CLOSE状态
  2. 第二是防止“已失效的报文连接请求”,A在TIME_WAIT中,经过这2MSL的时间,就可以使本链接持续的时间内产生的所有连接消失,这样就可以使下一个新的连接中不会出现这样旧的连接请求报文段

当然了,还可以发现,如果服务器如果先关闭,若现在立马再次启动服务器,就会报错说这个端口号被占用着,那就是因为有这个TIME_WAIT

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

推荐阅读更多精彩内容

  • 18.1 引言 TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本章将...
    张芳涛阅读 3,362评论 0 13
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,057评论 6 174
  • 1、TCP状态linux查看tcp的状态命令:1)、netstat -nat 查看TCP各个状态的数量2)、lso...
    北辰青阅读 9,419评论 0 11
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,052评论 0 8
  • 计算机网络七层模型中,传输层有两个重要的协议:(1)用户数据报协议UDP (User Datagram Proto...
    Q南南南Q阅读 1,711评论 0 3