| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> TCP/IP -> 正文阅读 |
|
[网络协议]TCP/IP |
目录 ??????? TCP/IP协议简介? ? ? ?计算机电脑之间需要定义一些共通的对象来进行交流,TVP/IP就是为此而生。TCP/IP不是一个协议而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及熟悉的http,ftp,pop3协议等等。电脑有了这些就好像学会了外语一样,就可以和其他的计算机终端做自由交流了 TCP/IP协议分层OSI参考模型,从下到上7层:物理层,数据链路层,网络层,运输层,会话层,表示层,应用层 TCP/IP参考模型,从上到下4层,层层包装:应用层,传输层,网络层,数据链路层 应用层:向用户提供一组常用的应用程序,比如电子邮件,文件传输访问,远程登录等 传输层:提供应用程序间的通信。功能包括:格式化信息流;提供可靠传输 网络层:负责相邻计算机之间的通信。功能包括:处理来自传输层的分组发送请求;处理输入数据报;处理路径,流控,拥堵等问题 网络接口层:这是tcp/ip软件的最底层,负责接收ip数据报并通过网络发送,或者从网络上接收物理帧,抽出IP数据报,交给IP层 IP是无连接的IP用于计算机之间的通信 IP是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路。所以IP就降低了对网络线路的要求。每条线可以同时满足许多不同的计算机之间的通信需要。 通过IP,消息被分割为小的独立的包,并通过因特网在计算机之间传送 IP负责将每个包路由至它的目的地 IP地址每个计算机必须有一个IP地址才能够连入因特网 每个IP包必须有一个地址才能发送到另一台计算机 TCP使用固定的连接TCP用于应用程序之间的通信 当应用程序通过TCP与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方握手后,TCP在两个应用程序之间建立一个全双工的通信。 这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。 UDP和TCP很相似,但是可靠性低于TCP IP路由器当一个IP包从一台计算机被发送,它会到达一个IP路由器 IP路由器负责将这个包路由至它的目的地,直接地或者通过其他的路由器 在一个相同的通信中,一个包所经由的路径可能会和其他的包不同,而路由器负责根据通信量,网络中的错误或者其他参数来进行正确寻址 域名域名就是TCP/IP地址的名字,域名会被一种DNS程序翻译为数字 DNS服务器负责将域名翻译为TCP/IP地址,同时负责使用新的域名信息更新彼此的系统 当一个新的域名连同TCP/IP地址一同注册后,全世界的DNS服务器都会对此信息进行更新 TCP/IPTCP/IP意味着TCP和IP在一起协同工作 TCP负责应用软件和网络软件之间的通信 IP负责计算机之间的通信 TCP负责将数据分割并装入IP包,然后在它们到达的时候重新组合他们 IP负责将包发送至接收者 TCP报文格式16位源端口号:16位的源端口中包含初始化通信的端口。源端口和源IP地址的作用是标识报文的返回地址 16位目的端口号:16位的目的端口定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口 32位序号:32位的序列号由接收端计算机使用,重新分段的报文成最初形式。当SYN出现时,序列码实际上是初始序列码,而第一个数据字节是ISN+1。这个序列号可用来补偿传输中的不一致 32位确认序号:32位的序列号由接收端计算机使用,重新分段的报文成最初形式。如果设置了ACK控制位,这个值表示一个准备接收的包的序列码 4位首部长度:4位包括TCP头大小 6位保留:为了将来定义新的用途而保留 标志:6位标志域。表示为:紧急标志,有意义的应答标志,推,重置连接标志,同步序列号标志,完成发送数据标志。分别为:URG,ACK,PSH,RST,SYN,FIN 16位窗口大小:用来表示想收到的每个TCP数据段的大小 16位校验和:16位TCP头 16位紧急指针:指向后面是优先数据的字节,在URG标志设置了时才有效 选项:长度不定,但长度必须为1个字节 数据:该TCP协议包负载的数据 URG:紧急标志 ACK:确认标志 PSH:推标志 RST:复位标志 SYN:同步标志 FIN:结束标志 TCP三次握手? ? ? ?所谓三次握手即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了 简洁说法: 1、建立连接时,客户端发送SYN包(SYN=i)到服务器,并进入到SYN-SEND状态,等待服务器确认 2、服务器收到SYN包,必须确认客户的SYN(ack=i+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器进入SYN-RECV状态 3、客户端收到服务器的SYN+ACK包,向服务器发送确认报ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手,客户端与服务器开始传送数据。 TCP四次挥手? ? ? ?所谓四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发: 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。 为什么建立连接是三次握手,而关闭连接却是四次挥手呢?? ? ? ?这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
|
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:51:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |