博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP/IP协议碎碎念
阅读量:7092 次
发布时间:2019-06-28

本文共 1205 字,大约阅读时间需要 4 分钟。

整个TCP过程描述:

1)服务器默认的状态是LISTEN,客户端先向服务器发送一个SYS,表明自己要求链接,这时候客户端处于SYS_SENT状态;

2)服务器收到SYS,返回一个ACK,同时再补上一个SYS,这时候服务器端处于SYS_RECEIVE状态;

3)客户端收到了服务器返回的SYS,自己进化成ESTABLISHED状态,然后应答那个ACK,服务器接收到这个应答ACK,进化成ESTABLISHED状态。这样两个就算彻底连接了。

以上简称“三次握手”。

然后客户机与服务器可以传送数据,keepalive。

4)客户端向服务器发送一个FIN告诉服务器可以断开连接了,此时客户端处于FIN_WAIT 1状态。

5)服务器收到这个信息得知可以断开连接了,服务器处于CLOSE_WAIT状态,然后发送信息告诉客户端,服务器这时候处于LAST_ACK状态。

6)客户端收到服务器确认断开连接的信息,进化成FIN_WAIT 2状态,最后成为TIME_WAIT状态。等待一些时间已确保能收到服务器的应答。

以上过程简称“四次挥手”。

TCP的传输过程一共是十一个状态:LISTEN,SYS_SENT,SYS_RECEIVE,ESTABLISHED,FIN_WAIT 1,FIN_WAIT 2,CLOSE_WAIT,CLOSEING,LAST_ACK,TIME_WAIT,CLOSED.

CLOSEING:等待远端TCP 的连接终止请求确认

CLOSED:不在连接状态(其实是不存在的)

那么为什么TCP非要采取三次握手呢?

主要原因就是防止“由于网络阻塞,失效的信息又复活”的情况,举个例子:

A要给B传数据,开始的时候A传了一次请求,但是这个请求失效了,于是过了一段时间之后,A又传了一次请求,这个时候B收到了,两个开始快乐的交流。交流完毕,双方断开。但是这个时候那个失效的信息终于爬到了B端,B也会如期打开端口跟A建立连接,A一看B来张开怀抱,那么A也要张开怀抱,但是A原打算要的数据已经都得到了,这一次虽然建立了链接,已经没东西可以要了。那么这样的链接就是空连接,白白浪费带宽。

TCP VS UDP

先说相同点,他俩都可以全双工,而且都是端到端的传输层通信协议。

TCP一般用来进行文件传输,因为文件的传输要求真真切切,一丝一毫都不能少,所以每一次建立必须要求数据都是十全十美。

TCP只能一对一,不支持广播和多播,TCP是面向字节流的。传输速度慢。

UDP一般用来网络语音传输,建立为主,通信质量其次。

UDP虽然不可靠但是也会尽全力交付,他是面向报文的,应用层给UDP什么样的报文,UDP就传送什么样的报文。

UDP支持一对一,一对多,多对多(各种视频会议),传输速度快。

 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1746515

转载地址:http://dgiql.baihongyu.com/

你可能感兴趣的文章
基于Opencv&Tensorflow实现实时查找停车位置
查看>>
Red Hat Enterprise Linux(RHEL)中yum的repo文件详解
查看>>
CSS3 是最新的 CSS 标准
查看>>
通过git工具提交文件到GitHub
查看>>
Confluence 6 管理协同编辑 - 代理和 SSL 的考虑
查看>>
Confluence 6 从一个 XML 备份中导入一个空间
查看>>
彩铅练习,樱桃
查看>>
yum 找不到程序, yum更换国内阿里源
查看>>
快速排序
查看>>
tomcat 、springboot远程调试
查看>>
1-AI--Activity生命周期
查看>>
SpringBoot集成RabbitMQ
查看>>
Linux基本操作命令之文件查看cat more less tail head
查看>>
[雪峰磁针石博客]python工具库介绍-dubbo:通过telnet接口访问dubbo服务
查看>>
Vue入门---常用指令详解
查看>>
苹果 AR 头盔真的要来了?
查看>>
C#+三层+会员管理系统源码
查看>>
windows使用Pandoc将Markdown转换为PDF文件
查看>>
SSM-SpringMVC-31:SpringMVC中利用hibernate-validator做后台校验
查看>>
Android/iOS及设计中ARGB颜色值百分比透明度换算
查看>>