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三次握手连接 的知识点总结的更多相关文章

  1. TCP/UDP协议、理解三次握手四次挥手、Socket

    一.什么是socket? 中文名叫套接字,是对底层的 TCP IP UDP 等网络协议进行封装,使得上层的应用程序开发者,不用直接接触这对复杂,丑陋的协议. 在程序员的言论,他就是一个封装好的模块,要 ...

  2. TCP常见的定时器及三次握手与四次挥手

    1.TCP常见的定时器 在TCP协议中有的时候需要定期或者按照某个算法对某个事件进行触发,那么这个时候,TCP协议是使用定时器进行实现的.在TCP中,会有七种定时器: 建立连接定时器(connecti ...

  3. socket中TCP的三次握手连接和四次握手释放

    三次握手连接 A: 我进来了啊 B:(有人来了安排个位子)回复:好的你进来吧 A:好的: 客户端向服务器发送一个SYN J 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1 客户 ...

  4. 【Java面试】TCP协议为什么要设计三次握手?

    一个工作5年的粉丝,最近去面试了很多公司,每次都被各种技术原理题问得语无伦次. 由于找了快1个月时间的工作,有点焦虑,来向我求助. 我能做的只是保证每天更新一个面试题,然后问他印象最深刻的一个面试题是 ...

  5. 网络基础二 tcp/ip协议簇 端口 三次握手 四次挥手 11种状态集

    第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成 ...

  6. TCP/IP 协议簇 端口 三次握手 四次挥手 11种状态集

    第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成 ...

  7. TCP/IP协议簇 端口 三次握手 四次挥手 11种状态集

    第一章:概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN (Virturl LAN) ,翻译成中文是:“虚拟局域网”.VLAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计 ...

  8. iOS 开发:TCP三次握手连接

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握 ...

  9. tcp 状态示码 及 三次握手

    TCP的几个状态对于我们分析所起的作用. 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五 ...

随机推荐

  1. Eclipse 安装 Maven 插件(图文解说)

    Help  --> 选择Eclipse Marketplace -->  在 Find 中输入 Maven integration for Eclipse  --> 回车搜索

  2. java基本类型的默认值及其取值范围

  3. 关于phpstrom 的一些实用小技巧与擦件

    1.界面中文方框问题 Settings->Appearance中Theme 设置 Windows勾选Override default fonts by (not recommended),设置字 ...

  4. 如何给GridView添加网格

    如何给gridview的单元格加上分割线 原文链接:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/1227/1582.html ...

  5. c/c++头文件_string

    string, cstring, string.h 一.string头文件 主要包含一些字符串转换的函数 // sto* NARROW CONVERSIONS// sto* WIDE CONVERSI ...

  6. windows多线程编程星球(一)

    以前在学校的时候,多线程这一部分是属于那种充满好奇但是又感觉很难掌握的部分.原因嘛我觉得是这玩意儿和编程语言无关,主要和操作系统的有关,所以这部分内容主要出现在讲原理的操作系统书的某一章,看完原理是懂 ...

  7. FFT时域与频域的关系,以及采样速率与采样点的影响

    首先对于FFT来说,输入的信号是一个按一定采样频率获得的信号序列,而输出是每个采样点对应的频率的幅度(能量). 下面详细分析: 在FFT的输出数据中,第一个值是直流分量的振幅(这样对应周期有无穷的可能 ...

  8. 架构设计(ASP.NET MVC+Knockout+Web API+SignalR)

    最近忙于重构项目的架构设计,没有时间发博客,也没有时间回复邮件及博文评论,忘各位见谅: 今天先发布架构设计图,同样没有时间写相关的介绍也没有时间回复评论,所以就不发在首页,希望给看到的朋友一些参考,同 ...

  9. 《精通正则表达式》笔记 --- “验证”Email格式

    写一个正则表达式的三个步骤: 理解需求并找出你需要验证的数据的特征: 写一个还可以用的正则表达式: 看看能不能达到你的目的,同时想想会不会匹配到一些不想要的数据: [可选]性能优化 我觉得写一个正则表 ...

  10. [每日电路图] 9、介绍一种低价简单的4.2V锂电池充电及稳压(LDO)电路——RT9193,SD8017

    消费类电子电路图设计中往往会涉及到4.2V锂离子电池充电电路.及4.2V转3.3V的LDO稳压电路,这里分享一种简单.便宜的设计方案: RT9193 300mA,Ultra-Low Noise,Ult ...