关于tcp-ip:理论-三天两夜万字长文吃透TCPIP

38次阅读

共计 3947 个字符,预计需要花费 10 分钟才能阅读完成。

思维导图

思维导图如下

计算机体系网络结构分层

概述

这里进行概述如下

物理层

物理层上传送的单位为比特,规定了网络的一些电器特定,次要负责 0,1 比特流与电子信号之间的转换,如果没有物理层,0,1 形成的比特流将会无奈在物理介质中流传。

链路层

数据链路层,又称作为链路层,单纯的 0 和 1 是没有任何意义的,必须规定其解读形式,多少个电信号算一组,每个电信号又有什么意义,这就是数据链路层的作用,数据链路层,规定次要有三个性能,别离是封装成帧、通明传输、差错控制。将会顺次解释这三个内容。

封装成帧

在一段数据的前后别离增加首部和尾部,来对帧与帧之间实现一个定界。定界如下

通明传输

因为不论什么数据,所传送的都应该能在链路上传送,因而通明传输会带来一个问题,当数据中的比特组合恰好统一的时候,如果采纳不适当的措施,将会造成数据被切分。如下图所示。

这里应用字节填充法实现通明传输的问题,发送端的数据在链路层中呈现控制字符 SOH 或者 ETO 的时候,在后面增加一个转义字符 ESC,如果 ESC 也呈现的话,这里就在 ESC 之前持续增加一个 ESC 实现本义,如下所示。

差错控制

在数据传输的过程中,如果呈现失落,或者帧损坏,这里就须要差错控制来进行检测和纠正,这个协定将会在网络层中进行阐明。

MAC 地址

数据帧筹备好了,这里还有一个问题,计算机 A 和计算机 B 之间数据互相发送,然而谁传给谁,如何辨别,这里 MAC 地址便呈现了。MAC 地址,连人网络的每一个计算机都会有网卡接口,每一个网卡都会有一个惟一的地址,这个地址称作为 MAC 地址,计算机网络之间互相传送的时候,都会应用 MAC 地址进行互相的传送。

网络层

网络层的次要性能负责不同网络之间转发数据,实现这个性能的,为路由器。

如果你在杭州的计算机 A 要给纽约的计算机 B 通信,这里就会应用播送形式发送数据包,而后比照 MAC 地址,雷同的接管,不同的抛弃,很显著,这样相当的不和你,所以在网络层中,划分了子网,协定规定,如果是在同一个子网,就会应用播送的模式把数据发送给对方,如果不是在同一个子网,将会发送给网关,而后进行转发。

传输层

通过网络层,A 曾经发送到了 B,在这里就有了传输层,传输层的次要作用,为相互通信的利用过程,提供数据传输服务,当计算机 A 与计算机 B 通信时,在传输层上,还须要指定一个端口,来给特定的应用程序,即,传输层性能是建设端口到端口的通信,相比网络层的性能是建设主机到主机的通信。

在传输层中,次要应用 TCP/UDP 协定。

TCP 传输控制协议,在数据传输的时候,会建设会话,同时会把须要传输的文件进行分段,提供牢靠传输和流量管制,例如下载视频,当数据较大的时,用的是 TCP 协定。

UDP 协定,一个数据包就能实现数据通信,也就是说不须要建设会话,不须要流量管制,同时也是不牢靠传输,例如 DNS 域名解析,屏幕播送,这里应用的就是 UDP 协定。

应用层

当数据传输到了传输层的数据之后,接下来须要解读,因为互联网开放式的,应用层作用规定利用的数据格式,例如 TCP 协定能够传输 Email,WWW,FTP 等,这些协定的数据格式。例如域名的 DNS,万维网的 HTTP 协定,电子邮件的 SMTP 协定等等。这些数据单元称之为报文。

TCP/IP 根底

具体含意

TCP/IP 这里指的是一些协定群,具体来说,这里指的是 IP 或者 ICMP,TCP,UDP,FTP 等,这些协定,以及 HTTP 等的 TCP/IP 协定,等等这些协定都通通称之为 TCP/IP 网际协议群。在互联网进行通信的时候,须要相应的网络协议,TCP/IP 本来就是为互联网开发定制的协定,这里互联网协议就是 TCP/IP,TCP/IP 就是互联网的一些协定。这里协定如下图所示

根本工作原理

TCP/IP 模型有四层,别离是应用层,网际层,网络接口层,这四层,每层别离具备不同的性能,TCP/IP 协定协定是一组在不同层上的多个协定的组合,每层在实现本身的状况下间接提供服务,同时也为下层提供服务其图示如下

进行封装和拆解的过程如下图

在这里,将会退出相干的数据报,以及相干的数据信息,达到传送数据的目标。

数据包

在这里,指的是 TCP/IP 协定数据通信中的数据单位,即,数据包,即,从最上层,一层层的封装,直到网络层,最初借由数据链路层发送的数据单元。即。数据包为一个残缺的数据单元,如果超过了 MTU,这个时候,会和多个帧组合在一起,而后造成一个残缺的数据包。

数据包的分层如下

在网络传输中,数据包由两个局部组成,一个是协定所须要用的首部,另一部分是上一层传过啦的数据,首部的构造由协定的具体标准进行定义,在数据包的首部,明确表明了协定应该如何读取数据,即,看到首部,就能明确的直到该协定所须要的信息和所须要解决的数据。

传输中和 TCP 和 UDP

端口

端口,英语为 port,称之为连贯端口,端口,协定端口,位于传输层的通信协议通常须要指定端口号,例如在 TCP/IP 协定族之下的 TCP 与 UDP 协定。在应用层中,应用主从式架构的通信协议,在每个端口上提供多路复用服务(multiplexing service)。经由公认端口号(well-known port numbers),通常能够辨认出这个连线应用的通信协议,其中具代表性的是最根底的 1024 个公认端口号(well-known port numbers),例如 Telnet 协定默认应用 23 端口来连线,Secure Shell 协定默认应用 22 端口,HTTP 协定默认应用 80 端口,HTTPS 协定默认应用 443 端口。

源端口号

源端口号个别是由零碎本人动静生成的一个从 1024-65535 的号码,当一台计算机 A 通过网络拜访计算机 B 时,如果它须要对方返回数据的话,它也会随机创立一个大于 1023 的端口,通知 B 返回数据时把数据送到本人的哪个端口,而后软件开始侦听这个端口,期待数据返回。而 B 收到数据后会读取数据包的源端口号和目标端口号,而后记录下来,当软件创立了要返回的数据后就把原来数据包中的原端口号作为目标端口号,而把本人的端口号作为原端口号,也就是说把收到的数据包中的原和目标反过来,而后再送回 A,A 再反复这个过程如此重复直到数据传输实现。当数据全副传输完 A 就把源端口释放出来,所以同一个软件每次传输数据时不肯定是同一个源端口号。

UDP

UDP 全称为用户数据报协定,是一个简略的面向数据报的通信协议,位于 OSI 模型的传输层,UDP 为不牢靠传输,

具备以下几个特点

  1. 面向无连贯 UDP 不须要和 TCP 一样在数据发送前进行三次握手进行连贯,只是数据的搬运工,不会对数据进行相干的解决。具体来说,在发送端,应用层把数据传输为 UDP 协定,UDP 只会给数据减少一个 UDP 头标识标识是 UDP 协定。在接收端,网络层把数据传送给传输层,不会做任何的拼接操作。

性能点

具备单播,多播,播送等性能。

面向报文

UDP 是面向报文的,既不合并,也不拆分,因而应用程序须要抉择适合的报文,进行发送。

不可靠性

UDP 回产生数据的失落,因为没有相干的数据的确认过程。

传输效率高

因为头部开销小,传输数据的时候报文效率相当的高。

TCP

当一台计算机与另一台计算机通信的时候,两台计算机须要通信畅通,并且牢靠,这样能力保障收发数据,所以就有了一个三次握手,四次挥手,实现数据的连贯。

三次握手

  1. 第一次握手(SYN=1, seq=x):

客户端发送一个 TCP 的 SYN 标记地位 1 的包,指明客户端打算连贯的服务器的端口,以及初始序号 X, 保留在包头的序列号 (Sequence Number) 字段里。

发送结束后,客户端进入 SYN_SEND 状态。

  1. 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):

服务器发回确认包 (ACK) 应答。即 SYN 标记位和 ACK 标记位均为 1。服务器端抉择本人 ISN 序列号,放到 Seq 域里,同时将确认序号 (Acknowledgement Number) 设置为客户的 ISN 加 1,即 X +1。发送结束后,服务器端进入 SYN_RCVD 状态。

  1. 第三次握手(ACK=1,ACKnum=y+1)

客户端再次发送确认包(ACK),SYN 标记位为 0,ACK 标记位为 1,并且把服务器发来 ACK 的序号字段 +1,放在确定字段中发送给对方,并且在数据段放写 ISN 的 +1

发送结束后,客户端进入 ESTABLISHED 状态,当服务器端接管到这个包时,也进入 ESTABLISHED 状态,TCP 握手完结。

四次挥手

  1. 第一次挥手(FIN=1,seq=x)

假如客户端想要敞开连贯,客户端发送一个 FIN 标记地位为 1 的包,示意本人曾经没有数据能够发送了,然而依然能够承受数据。

发送结束后,客户端进入 FIN_WAIT_1 状态。

  1. 第二次挥手(ACK=1,ACKnum=x+1)

服务器端确认客户端的 FIN 包,发送一个确认包,表明本人承受到了客户端敞开连贯的申请,但还没有筹备好敞开连贯。

发送结束后,服务器端进入 CLOSE_WAIT 状态,客户端接管到这个确认包之后,进入 FIN_WAIT_2 状态,期待服务器端敞开连贯。

  1. 第三次挥手(FIN=1,seq=y)

服务器端筹备好敞开连贯时,向客户端发送完结连贯申请,FIN 置为 1。

发送结束后,服务器端进入 LAST_ACK 状态,期待来自客户端的最初一个 ACK。

  1. 第四次挥手(ACK=1,ACKnum=y+1)

客户端接管到来自服务器端的敞开申请,发送一个确认包,并进入 TIME_WAIT 状态,期待可能呈现的要求重传的 ACK 包。

服务器端接管到这个确认包之后,敞开连贯,进入 CLOSED 状态。

客户端期待了某个固定工夫(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK,认为服务器端曾经失常敞开连贯,于是本人也敞开连贯,进入 CLOSED 状态。

更多技术学习交换能够退出我的编程学习园地。

正文完
 0