; 网络及TCP三次握手四次挥手 | Linux运维部落

网络及TCP三次握手四次挥手

批处理应用程序

FTP 、TFTP 、库存更新

无需直接人工交互

带宽很重要,但并非关键性因素

交互式应用程序

库存查询、数据库更新。

人机交互。

因为用户需等待响应,所以响应时间很重要,但并非关键性因素,除非要等待很长时间。

实时应用程序

VoIP 、视频

人与人的交互

端到端的延时至关重要

拓扑结构

物理拓扑:

总线拓扑;所有设备均可接收信号

环状拓扑;信号绕环传输,单一故障点

星型拓扑;通过中心点传输,单一故障点

扩展星型拓扑;比星型拓扑的复原能力更强


逻辑拓扑:

双环拓扑;信号沿相反方向传输,比单环的复原能力更强

全网状拓扑;容错能力强,实施成本高

部分网状拓扑;在容错能力与成本之间寻求平衡

网络模型分层:七层

1-4层通信子网 5-7层资源子网

1.物理层:

二进制传输;为启动,维护以及关闭物理链路定义了电气规范,机械规范,过程规范和功能规范

2.数据链路层:

访问介质;定义如何格式化数据以便进行传输以及如何控制对网络的访问

支持错误检测

3.网络层;数据传输

路由数据包

选择传递数据的最佳路径

支持逻辑寻址和路径选择

4.传输层;传输问题

确保数据传输的可靠性

建立,维护和终止虚拟电路

通过错误检查和恢复

信息流控制来保障可靠性

5.会话层;主机间通信

建立,管理和终止在应用程序之间的会话

6.表示层;数据表示

确保接受系统可以读出该数据

格式化数据

构建数据

协商用于应用层的数据传输语法

提供加密

7.应用层;网络进程访问应用层

为应用程序进程提供网络服务(电子邮件,文件传输和终端仿真)

提供用户身份验证

对等通信

三种通讯模式

1.单播:两台计算机通过特有的通道进行通信。

2.广播:多台计算机在一定的范围内通信(本地子网范围),当某一计算机发送消息,其他所有的计算机都会受到信息。

3.组播:即发送者和接受者可以实现多种通信方式,这种方式以小组的形式存在,既可以是同一物理网络,也可以是不同的物理网络。这样一来,就能极大地提升通信的速率。

LAN 组成 局域网 Local Area Network

Computers

PCs 计算机

Servers 服务器

Interconnections

NICs 网卡

Media 媒体

Network devices 网络设备

Hubs 集线器

Switches 交换机

Routers 路由器

Protocols 协议

Ethernet 以太网

IP

ARP

DHCP

网络线缆和接口

双绞线 Twisted-Pair

线缆 Coaxal

光纤 Fiber-Optic

UTP

线序:T568B标准 橙白 橙绿白蓝蓝白绿棕白棕

100M实际用1/2(发数据) 3/6(收数据)两组线

1000M实际用1/2 3/6 4/5 7/8(都可收发数据)四组线

UTP 直通线(Straight-Through)

以太网桥

交换式以太网的优势

扩展了网络带宽

分割了网络冲突域,使网络冲突被限制在最小的范围内

交换机作为更加智能的交换设备,能够提供更多用户所要求的功能:优先级、虚拟网、远程检测……

以太网桥的工作原理

以太网桥监听数据帧中源MAC 地址,学习MAC ,建立MAC表 表

对于未知MAC 地址,网桥将转发到除接收该帧的端口之外的所有端口

当网桥接到一个数据帧时,如果该帧的目的位于接收端口所在网段上,它就过滤掉该数据帧;如果目的MAC 地址在位于另外一个端口,网桥就将该帧转发到该端口

当网桥接到广播帧时候,它立即转发到除接收端口之外的所有其他端口

路由器

为了实现路由, 路由器需要做下列事情:

分隔广播域

选择路由表中到达目标最好的路径

维护和检查路由信息

连接广域网

路由

路由:把一个数据包从一个设备发送到不同网络里的另一个设备上去。这些工作依靠路由器来完成。路由器只关心网络的状态和决定网络中的最佳路径。路由的实现依靠路由器中的路由表来

VLAN

分隔广播域

安全

灵活管理

VLAN = 广播域= 络逻辑网络 (Subnet)

分层的网络架构

核心层Core Layer企业级应用快速转发

分布层DistributionLayer广播域,路由,安全,远程接入,访问层汇聚

访问层AccessLayer终端接入

TCP/IP 协议栈

Transmission Control Protocol/Internet Protocol

传输控制协议/ 因特网互联协议

TCP/IP 是一个Protocol Stack ,包括TCP、IP 、UDP 、ICMP 、RIP 、TELNET、FTP 、SMTP 、ARP 等许多协议

最早发源于美国国防部(缩写为DoD )的因特网的前身ARPA 网项目,1983 年1 月1

日,TCP/IP 取代了旧的网络控制协议NCP,成为今天的互联网和局域网的基石和标准。由互联网工程任务组负责维护。

共定义了四层

和ISO 参考模型的分层有对应关系

TCP/IP 协议栈和 OSI 模型

TCP/IP 应用层

Application

File transfer 文件传输

FTP FTP协议 传载大文件

TFTP 轻量级FTP 传载小文件

Network File System 网络文件系统

E-mail 电子邮件

Simple Mail Transfer Protocol 简单邮件传输协议

Remote login 远程登录

Telnet

rlogin

Network management 网络管理

Simple Network ManagementProtocol 简单网络管理协议

Name management 名称管理

Domain Name System 域名系统

传输层

Transport

Session multiplexing 多路会话

Segmentation 分段

Flow control (when required) 流控制(必要时)

Connection-oriented(when required) 面向连接(必要时)

Reliability (when required) 可靠的(必要时)

Reliable可靠的

Best-Effort高效的

Connection Type连接类型

Connection-oriented 面向连接的

Connectionless 无连接

Protocol 协议

TCP

UDP

Sequencing 顺序

Yes

No

Uses

E-mail 电子邮件

File sharing 文件共享

Downloading 下载

Voice streaming 语音流

Video streaming 视频流

TCP 特性

工作在传输层面向连接协议

全双工协议

半关闭

错误检查

将数据打包成段,排序

确认机制

数据恢复,重传

流量控制,滑动窗口

拥塞控制,慢启动和拥塞避免算法

TCP包头

源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个

序列号:表示本报文段所发送数据的第一个字节的编号。在TCP 连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从0开始

确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送发:我希望你(指发送方)下次发送的数据的第一个字节数据的编号是这个确认号。也就是告诉发送方:我希望你(指发送方)下次发送给我的TCP 报文段的序列号字段的值是这个

数据偏移:由于TCP 首部包含一个长度可变的选项部分,所以需要这么一个值来指定这个TCP出报文段到底有多长。它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,即TCP 报文段的首部长度。该字段的单位是32 位字,即:4个字节

URG :表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效

ACK :表示是否前面的确认号字段是否有效。ACK=1 ,表示有效。只有当ACK=1时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为1, 带ACK 标志的TCP 报文段称为确认报文段

PSH :提示接收端应用程序应该立即从TCP 接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1 ,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP 接收缓冲区中

RST :如果收到一个RST=1 的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST 标志的TCP 报文段称为复位报文段

SYN :在建立连接时使用,用来同步序号。当SYN=1 ,ACK=0 时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1 时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1 ,带SYN 标志的TCP 报文段称为同步报文段

v FIN :表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN 标志的TCP报文段称为结束报文段

窗口大小:表示现在运行对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量

校验和:提供额外的可靠性

紧急指针:标记紧急数据在数据字段中的位置。

选项部分:其最大长度可根据TCP 首部长度进行推算。TCP首部长度用4 位表示,选项部分最长为:(2^4-1)*4-20=40 字节

TCP 协议

传输层通过port 号,确定应用层协议

Port number:

tcp :传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路

0-65535

udp :User Datagram Protocol ,无连接的协议

0-65535

IANA: 互联网数字分配机构(负责域名,数字资源,协议分配)

0-1023 :系统端口或特权端口( 仅管理员可用) ,众所周知,永久的分配给固定的系统应用使用,22/tcp(ssh), 80/tcp(http), 443/tcp(https)

1024-49151 :用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用,1433/tcp(SqlServer,1521/tcp(oracle),3306/tcp(mysql),11211/tcp/udp (memcached)

49152-65535: : 动态端口或私有端口,客户端程序随机使用的端口其范围的定义:/proc/sys/net/ipv4/ip_local_port_range

TCP 三次握手

第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认

第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态

第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手

为什么要三次握手

已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。

防止服务器端一直等待而浪费资源

TCP四次挥手

第一次分手:主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了

第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求

第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态

第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了

TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

FIN_WAIT_1: 这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。(主动方) FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你(ACK信息),稍后再关闭连接。(主动方)

CLOSE_WAIT:这种状态的含义其实是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以 close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。(被动方)

LAST_ACK: 这个状态还是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。(被动方)

TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FINWAIT1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。(主动方)

CLOSED: 表示连接中断。

例:

1.OSI 模型中物理层,数据链路层,网络层,传输层中的数据传输单位分别是什么?其他三个层的名称是什么?

答:物理层单位为比特bit,数据链路层单位为帧,网络层单位为包,传输层单位为段,其他三个层分别是会话层,表示层,应用层。

2.简述为什么说 TCP 是可靠连接而 UDP 是不可靠连接?

答:TCP是面向连接的协议(三次握手,四次挥手),全双工,半关闭,将数据打成段,排序,错误检查,确认机制,数据恢复,重传,流量控制,滑动窗口,拥塞控制,慢启动和拥塞避免算法。

TCP 超时重传

异常网络状况下(开始出现超时或丢包),TCP 控制数据传输以保证其承诺的可靠服务

TCP 服务必须能够重传超时时间内未收到确认的TCP 报文段。为此,TCP 模块为每个TCP 报文段都维护一个重传定时器,该定时器在TCP 报文段第一次被发送时启动。如果超时时间内未收到接收方的应答,TCP 模块将重传TCP 报文段并重置定时器。至于下次重传的超时时间如何选择,以及最多执行多少次重传,就是TCP 的重传策略

与TCP 超时重传相关的两个内核参数:

/proc/sys/net/ipv4/tcp_retries1 ,指定在底层IP 接管之前TCP最少执行的重传次数,默认值是3

/proc/sys/net/ipv4/tcp_retries2 ,指定连接放弃前TCP最多可以执行的重传次数,默认值15 (一般对应13 ~30min)

拥塞控制

TCP 为提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。即所谓的拥塞控制

TCP 拥塞控制的标准文档是RFC 5681 ,其中详细介绍了拥塞控制的四个部分:慢启动(slow start )、拥塞避免(congestion avoidance )、快速重传(fast retransmit )和快速恢复(fast recovery )。拥塞控制算法在Linux下有多种实现,比如reno 算法、vegas 算法和cubic 算法等。它们或者部分或者全部实现了上述四个部分

当前所使用的拥塞控制算法

/proc/sys/net/ipv4/tcp_congestion_control

映射第四层到应用程序

UDP特性

工作在传输层

提供不可靠的网络访问

非面向连接协议

有限的错误检查

传输性能高

ARP表

[root@centos7 ~]#ip neigh
192.168.74.1 dev eth0 lladdr 00:50:56:c0:00:01 REACHABLE
192.168.74.254 dev eth0 lladdr 00:50:56:e3:29:de STALE
192.168.199.1 dev eth1 lladdr d4:ee:07:52:3a:46 STALE
192.168.199.207 dev eth1 lladdr ac:c1:ee:7b:a3:5b STALE
 
[root@centos7 ~]#arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.74.1 ether 00:50:56:c0:00:01 C eth0
192.168.74.254 ether 00:50:56:e3:29:de C eth0
192.168.199.1 ether d4:ee:07:52:3a:46 C eth1
192.168.199.207 ether ac:c1:ee:7b:a3:5b C eth1

 

Internet层

Internet Protocol (IP) 因特网协议(IP)

Internet Control Message 因特网控制消息

Protocol (ICMP) 协议(ICMP)

Address Resolution 地址解析

Protocol (ARP) 协议(ARP)

Reverse Address 反向地址

Resolution Protocol (RARP) 解析协议(RARP)

Internet协议特征

运行于OSI网络层

面向无连接的协议

独立处理数据包

分层编址

尽力而为传输

无数据恢复功能

IP PDU 报头

版本: 占4位,指 IP 协议的版本目前的IP 协议版本号为4

首部长度: 占4 位, 可表示的最大数值是15个单位,一个单位为4字节,因此IP 的首部长度的最大值是60 字节

区分服务: 占8 位, 用来获得更好的服务, 在旧标准中叫做服务类型,但实际上一直未被使用过. 后改名为区分服务. 只有在使用区分服务(DiffServ) 时, 这个字段才起作用. 一般的情况下都不使用

总长度: 占16 位, 指首部和数据之和的长度, 单位为字节, 因此数据报为的最大长度为 65535 字节.总长度必须不超过最大传送单元MTU

标识: 占16 位, 它是一个计数器, 通常,每发送一个报文,改值会加1,也用于数据包分片,在同一个包的若干分片中,该值是相同的

标志(flag): 占3 位, 目前只有前两位有意义

MF :标志字段的最低位是MF(More Fragment),MF=1表示后面还有分片。MF=0表示最后一个分片

DF :标志字段中间的一位是DF(Don’t Fragment)当,只有当DF=0时才允许分片片偏移: 12 , 指较长的分组在分片后某片在原分组中的相对位置. 片偏移以8 个字节为偏移单位

生存时间: 占8位, 记为TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送端初始设置一个8 bit字段. 推荐的初始值由分配数字RFC指定, 当前值为64.发送ICMP把回显应答时经常把TTL值设为最大值255

协议: 占8 位, 指出此数据报携带的数据使用何种协议以便目的主机的IP 层将数据部分上交给哪个处理过程, 1表示为 ICMP协议, 2表示为IGMP协议, 6表示为TCP协议, 17表示为UDP协议

首部检验和: 占16 位, 只检验数据报的首部不检验数据部分.这里不采用 CRC 检验码而采用简单的计算方法

源地址和目的地址:都各占4字节, 分别记录源地址和目的地址

IP PDU报头示例

片偏移以8个字节为偏移单位

原创文章,作者:Linux.rookie,如若转载,请注明出处:/74829

发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论列表(2条)

  • 小伟 2017-11-06 16:57

    这排版我也是醉了。

    • 娅娃爱 2017-11-21 16:55

      我觉着没啥问题,能看懂,不懂的去google深究。至少对分享的人保持敬畏之心。

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:测试  万达主管QQ  万达娱乐开户  万达登录  华宇招商  万达娱乐主管  万达招商  万达娱乐招商  guoqibee.com  万达娱乐招商