TCP ,UDP概念和TCP三次握手连接 的知识点总结

简介:

OSI 计算机网络7层模型

TCP/IP四层网络模型

传输层提供应用间的逻辑通信(端到端),网络层提供的是主机到主机的通信,传输层提供的是可靠服务。

TCP 中常说的握手指的是:连接的定义和连接的建立的过程。IP 协议是无连接的,但是 TCP 是有链接的。

端口:数据链路层依靠 mac 地址寻址,网络接口层依靠 ip 地址寻址,传输层依靠端口号寻址,端口就是应用层的各种协议进程和传输实体之间进行层间交换的地址。

端口号:标识不同进程的号码,16位,2的16次方个,只在本地有意义。一共有三类,一是保留端口,比如 ftp 是21,20,dns 是53,http 是80端口,smtp 是25等。二是登记端口,三是客户端端口号,也叫临时端口(前两者叫服务端端口)

套接字:主机 ip+端口号组成,只有通过 ip 地址和端口号,才唯一确定一个连接的端口。唯一的标识了网络里的某台主机中的某个应用进程。

udp :

用户数据报协议,实现的是无连接服务,无确认,不可靠的交付,开销小,时延短,没有拥塞控制,主要应用于实时应用,比如 ip 电话,qq,视频会议等。udp 数据报仅仅是 ip 数据报的一部分。

tcp

也就是传输控制协议,实现的是面向连接的服务,向上提供了一条全双工的可靠的逻辑信道,可靠交付,开销大,注意,tcp 的连接通道是逻辑 上的,对路由器不可见,类似虚电路。

tcp 连接的三段:

建立,传送,释放。连接的端点叫 socket(套接字),被唯一的通信两端点确定,采用的是 cs 架构(客户服务器模型),tcp 传输连接的建立采用的是三次握手(可以防止报文段在传输过连接建立中出错)。

tcp三次握手的最主要目的是保证连接是双工的,可靠更多的是通过重传机制来保证的。

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。

通过这样的三次握手,客户端与服务端建立起可靠的双工的连接,开始传送数据。

 

但是为什么一定要进行三次握手来保证连接是双工的呢,一次不行么?两次不行么?我们举一个现实生活中两个人进行语言沟通的例子来模拟三次握手。

第一次握手:

在考试, a同学 和 b 同学是铁哥们,此时a 想抄b 的卷子上第一个大题的结果。

a 就向 b 说悄悄话,小 b,我抄一下你的卷子的第一个大题的答案,我算不出来了。此时结果有两种:

1、假如小 b 专心答题,没注意 a 的请求,那么,a 和 b 的沟通建立失败,也就是说 b 同学接受不到 a 同学传来的信息,沟通肯定是失败了。

2、假如小 b 听到了 a 的悄悄话,好了,说明第一次对话(握手)成功了。说明 a 同学对 b 同学的请求,b 能接受到。

 

第二次握手:

小 b 听到了 a 的请求抄袭的信息,结果有两种:

1、假如 b 同学因为紧张,虽然听到了,但是听的内容比较模糊,不知道a具体是想抄袭哪道题,于是就索性的随便敷衍一句:我也不会。此时的a同学一听立刻生气了,还能不能做朋友了?算我看错你了!好的吧,a 和 b 的沟通失败。说明b 同学无法做出正确应答的情况下沟通失败。

2、假如b 同学听到且听清了a 同学的抄袭请求,于是乎,b 同学会做出正确的应答,并对 a说出了第一个大题的结果,并且ab兄弟情深,b还怕a他抄不上。反问:a,你抄好了么?那么等价于第二次握手成功。通过前两次对话(握手)证明了b同学能听到且听清a同学说的话,并能对 a同学的请求,去做出正确的应答。接下来进行第三次握手。

 

第三次握手:

 a 得到了 b 同学的正确的反馈,此时有两个结果:

1、假如a 同学很高兴,马上开始抄吧!a 就忘乎所以了,抄的飞起,结果没注意 b 同学的最后那句话『你炒好了么?』,让人家小b 同学等回复等了好几分钟。b很失落,心说:好啊你,你抄到了,就忘了我了,得,我再也不管你了,最后ab还是沟通失败。说明a 同学无法对 b 同学做出应答的情况下,ab沟通失败。

2、假如a 同学注意到了 b 的反馈和反问,于是 a 同学对 b 同学说:我抄好了。那么 ab 的第三次握手成功,ab已经建立起了愉快流畅的沟通渠道,接下来a 和 b 就可以继续愉快的去传递答案了。

 

通过第二次和第三次的握手证明:

a 同学能够听到听清 b 同学的话,并且a 同学对此,能做出正确的反馈。可见,ab进行有效的,愉快的沟通,那么这三次握手的过程是必须的。

 

同理对于TCP为什么需要进行三次握手,可以一样的理解:

实际上就是为了两边的请求都能被识别,所以逻辑上最少三次。为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手。

 

辛苦的劳动,转载请注明出处,谢谢……
http://www.cnblogs.com/kubixuesheng/p/4354282.html
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
26天前
|
域名解析 网络协议 关系型数据库
tcp和udp的区别是什么
TCP和UDP是互联网协议中的传输层协议。TCP是面向连接的,通过三次握手建立可靠连接,提供数据顺序和可靠性保证,适用于HTTP、FTP等需要保证数据完整性的应用。UDP则是无连接的,数据报独立发送,传输速度快但不保证可靠性,常用于实时通信、流媒体和DNS解析等对速度要求高的场景。根据应用需求选择合适的协议至关重要。
tcp和udp的区别是什么
|
29天前
|
网络协议 网络性能优化
认识TCP和UDP的区别
重排机制:由于UDP数据包可能因网络原因而发生乱序,因此在应用层需要对接收到的数据包进行排序。
25 4
|
1月前
|
网络协议 网络性能优化
网络面试题:TCP和UDP的区别
网络面试题:TCP和UDP的区别
25 0
|
1月前
|
网络协议 Python
Python网络编程实现TCP和UDP连接
Python网络编程实现TCP和UDP连接
27 0
|
1月前
|
网络协议 网络性能优化 Python
python怎么实现tcp和udp连接
python怎么实现tcp和udp连接
16 0
|
3月前
|
域名解析 网络协议
【计算机网络】DNS 分别在什么情况下使用 UDP 和 TCP?
【1月更文挑战第10天】【计算机网络】DNS 分别在什么情况下使用 UDP 和 TCP?
|
3月前
|
网络协议
【计算机网络】为什么DNS协议采用的是UDP作为传输层协议,而不是TCP?
【1月更文挑战第10天】【计算机网络】为什么DNS协议采用的是UDP作为传输层协议,而不是TCP?
|
3月前
|
网络协议 Linux 数据处理
网络编程【网络编程基本概念、 网络通信协议、IP地址 、 TCP协议和UDP协议】(一)-全面详解(学习总结---从入门到深化)
网络编程【网络编程基本概念、 网络通信协议、IP地址 、 TCP协议和UDP协议】(一)-全面详解(学习总结---从入门到深化)
79 3
|
1月前
|
网络协议 Linux
TCP 和 UDP 的 Socket 调用
【2月更文挑战第19天】
TCP 和 UDP 的 Socket 调用
|
1月前
|
网络协议 数据格式