TCP、UDP详解
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为什么需要进行三次握手,可以一样的理解:
实际上就是为了两边的请求都能被识别,所以逻辑上最少三次。为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手。
*****************************************
借鉴自望梅止渴
TCP、UDP详解的更多相关文章
- 网络传输层之TCP/UDP详解
一.运输层协议概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层. 运输层的任务就是负责主机中两个进程之间的通信,其数据传输的单 ...
- TCP/UDP详解
转载:http://www.cnblogs.com/visily/archive/2013/03/15/2961190.html, 作者:望梅止渴 相关: HTTP协议详解 深入理解HTTP协议 T ...
- 《TCP/IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- TCP、UDP详解与抓包工具使用
参考:https://www.cnblogs.com/HPAHPA/p/7737641.html TCP.UDP详解 1.传输层存在的必要性 由于网络层的分组传输是不可靠的,无法了解数据到达终点的时间 ...
- TCP/IP详解学习笔记
TCP/IP详解学习笔记(1)-基本概念 TCP/IP详解学习笔记(2)-数据链路层 TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议 TCP/IP详解学习笔记(4)-ICMP协议, ...
- TCP/IP详解 (转)
TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中 ...
- 《TCP/IP详解卷1:协议》第1章 概述-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- TCP/IP详解
第一篇 TCPIP协议详解 第1章 TCPIP协议族 第2章 IP协议详解 第3章 TCP协议详解 第4章 TCP/IP通信案例:访问Internet上的Web服务器 一.TCP/IP协议族 TCP/ ...
- TCP IP详解(转)
大学学习网络基础的时候老师讲过,网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 网络七层协议简称OSI.TCP/IP刨除了物理层,并把上三层(会话层.表示层和应用层)统称 ...
- 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
随机推荐
- openwrt的编译系统是如何制作根文件系统的
答:分析以下makefile即可获取整个过程 以nxp layerscape系统的编译过程为例 1.分析target/linux/layerscape/image/Makefile的最后一句,这是一个 ...
- SaltStack匹配target-第六篇
练习内容 Salt远程执行中目标选择常用的模式 1.通配符匹配 2.正则表达式匹配 3.List支持 4.Grains匹配 5.IP地址匹配 6.混合匹配 7.Node groups 远程执行格式 t ...
- java如何实现Socket的长连接和短连接
讨论Socket必讨论长连接和短连接 一.长连接和短连接的概念 1.长连接与短连接的概念:前者是整个通讯过程,客户端和服务端只用一个Socket对象,长期保持Socket的连接:后者是每次请求,都新建 ...
- kubernetes dashboard 二次开发
Kubernetes Dashboard 二次开发 官方源码:https://github.com/kubernetes/dashboard 开发文档:https://github.com/kuber ...
- Kaggle 项目之 Digit Recognizer
train.csv 和 test.csv 包含 1~9 的手写数字的灰度图片.每幅图片都是 28 个像素的高度和宽度,共 28*28=784 个像素点,每个像素值都在 0~255 之间. train. ...
- 缓存技术内部交流_04_Cache Aside续篇
额外参考资料: http://www.ehcache.org/documentation/3.2/expiry.html F. Cache Aside 模式的问题:缓存过期 有时我们会在上线前给缓存系 ...
- 淘汰算法 LRU、LFU和FIFO
含义: FIFO:First In First Out,先进先出LRU:Least Recently Used,最近最少使用 LFU:Least Frequently Used,最不经常使用 以上三者 ...
- kotlin for android----------MVP模式实现登录
学习了Kotlin,随便来个小案例,以MVP+Kotlin 来实现登录的一个小案例,希望对大家有所帮助,效果图: MVP: Model Model 是用户界面需要显示数据的抽象,也可以理解为从业务数据 ...
- 重新学习MySQL数据库6:浅谈MySQL的中事务与锁
『浅入深出』MySQL 中事务的实现 在关系型数据库中,事务的重要性不言而喻,只要对数据库稍有了解的人都知道事务具有 ACID 四个基本属性,而我们不知道的可能就是数据库是如何实现这四个属性的:在这篇 ...
- jQuery-瀑布流的取巧做法分享
分析:瀑布流,做法有2种 (1)绝对定位方案:每个单元格设置为绝对定位,通过计算,分别设置 top , left 即可实现 (2)浮动方案:弄N列布局(浮动),然后图片数据,按顺序依次插入,如N为 ...