Linux基础:TCP/IP协议详解

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              OSI参考模型

应用层               应用层
                         表示层
                         会话层

传输层               传输层

internet层           网络层

数据链路层           数据链路层

物理层               物理层

TCP特性编程


工做在传输层
面向链接协议
全双工协议
半关闭
错误检查
将数据打包成端,排序
确认机制
数据恢复重传
流量控制,滑动窗口
拥塞控制,慢启动和拥塞避免算法

TCP缓存


源端口,目标端口:计算机上的进程要是和其余进程通讯是经过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,因此经过制定源端口和目标端口,就能够知道是那两个进程须要通讯,源端口,目标端口是用16位表示的,可推算计算机端口个数为2^16个
序列号:表示本报文段所发送数据的第一个字节的编号,在TCP连接中所传送的字节节流的每个字节都会按顺序编号,因为序列号有32位表示,因此每2^32个字节,都会出现序列号回绕,再次从0开始
确认号:表示接收方指望收到发送方下一个报文段的第一个字节数据的编号,也就是告诉发送发:我但愿你下一次发送的数据的第一个字节数据的编号是这个确认号 
数据偏移: 表示TCP报文段的首部长度,共4位 因为TCP首部包含一个长度可变的选项部分,须要指定这个TCP报文的长度到底有多长,他指出TCP报文段的数据起始处距离TCP报文段的起始处有多远 ,该字段单位是32位,4位二进最大表示15 因此数据飘逸也是TCP首部最大60字节

TCP包头服务器


URG:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效 
    ACK:表示是否前面确认号字段是否有效。只有当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报文 段称为同步报文段 
    FIN:表示通知对方本端要关闭链接了,标记数据是否发送完毕。若是FIN=1,即告诉对方: “个人数据已经发送完毕,你能够释放链接了”,带FIN标志的TCP报文段称为结束报文段

序号和确认号和标记为网络


seq:序号:发送者的发的包的序号 
ack:确认号:是接收者收到后返回的确认包 

标记位:
URG:(紧急指针位)只有当URG=1时才有意义
ACK:(确认位)表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。
RST:重置位
SYN:同步位
FIN:结束位

TCP包头并发


窗口大小:表示如今容许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始容许对方发送的数据量
校验和:提供额外的可靠性
紧急指针:标记紧急数据在数据字段中的位置
选项部分:其最大长度可根据TCP首部长度进行推算
常见选项:
    最大报文段长度:Maxium Segment Size,MSS
    窗口扩大:Windows Scaling
    时间戳: Timestamps

TCP三次握手ssh


所谓三次握手(Three-way Handshake),是指创建一个TCP链接时,须要客户端和服务器总共发送3个包。
三次握手的目的是链接服务器指定端口,创建TCP链接,并同步链接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手:

三次握手过程socket


第一次握手:创建链接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 
第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时本身也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手.

TCP四次挥手tcp

TCP的链接的拆除须要发送四个包,所以称为四次挥手(four-way handshake)。
客户端或服务器都可主动发起挥手动做,在socket编程中,任何一方执行close()操做便可产生挥手操做。

四次挥手过程ide


step1:第一次挥手
首先,客户端发送一个FIN,用来关闭客户端到服务器的数据传送,而后等待服务器的确认。其中终止标志位FIN=1,序列号seq=u。

step2:第二次挥手
服务器收到这个FIN,它发送一个ACK,确认ack为收到的序号加一。

step3:第三次挥手
关闭服务器到客户端的链接,发送一个FIN给客户端。

step4:第四次挥手
客户端收到FIN后,并发回一个ACK报文确认,并将确认序号seq设置为收到序号加一。首先进行关闭的一方将执行主动关闭,而另外一方执行被动关闭。

客户端发送FIN后,进入终止等待状态,服务器收到客户端链接释放报文段后,就当即给客户端发送确认,服务器就进入CLOSE_WAIT状态,
此时TCP服务器进程就通知高层应用进程,于是从客户端到服务器的链接就释放了。
此时是“半关闭状态”,即客户端不能够发送给服务器,服务器能够发送给客户端。 
此时,若是服务器没有数据报发送给客户端,其应用程序就通知TCP释放链接,而后发送给客户端链接释放数据报,并等待确认。
客户端发送确认后,进入TIME_WAIT状态,可是此时TCP链接尚未释放,而后通过等待计时器设置的2MSL后,才进入到CLOSE状态。

为何创建链接协议是三次握手,而关闭链接倒是四次呢


这是由于服务端的LISTEN状态下的SOCKET当收到SYN报文的链接请求后,它能够把ACK和SYN(ACK起应答做用,而SYN起同步做用)放在一个报文里来发送。

但关闭链接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;
但未必你全部的数据都所有发送给对方了,因此你可能未必会立刻会关闭SOCKET,也即你可能还须要发送一些数据给对方以后,再发送FIN报文给对方来表示你赞成如今能够关闭链接了,
因此它这里的ACK报文和FIN报文多数状况下都是分开发送的。

为何不能用两次握手进行链接


咱们知道,3次握手完成两个重要的功能,既要双方作好发送数据的准备工做(双方都知道彼此已准备好),也要容许双方就初始序列号进行协商,这个序列号在握手过程当中被发送和确认。

如今把三次握手改为仅须要两次握手,死锁是可能发生的。
做为例子,考虑计算机S和C之间的通讯,假定C给S发送一个链接请求分组,S收到了这个分组,并发 送了确认应答分组。
按照两次握手的协定,S认为链接已经成功地创建了,能够开始发送数据分组。
但是,C在S的应答分组在传输中被丢失的状况下,将不知道S 是否已准备好,不知道S创建什么样的序列号,C甚至怀疑S是否收到本身的链接请求分组。
在这种状况下,C认为链接还未创建成功,将忽略S发来的任何数据分 组,只等待链接确认应答分组。
而S在发出的分组超时后,重复发送一样的分组。这样就造成了死锁。

为何TIME_WAIT状态须要通过2MSL(最大报文段生存时间)才能返回到CLOSE状态?


虽然按道理,四个报文都发送完毕,咱们能够直接进入CLOSE状态了,可是咱们必须假象网络是不可靠的,有能够最后一个ACK丢失。
因此TIME_WAIT状态就是用来重发可能丢失的ACK报文。

TCP超时重传


异常网络状态下(开始出现超时或丢包),TCP控制数据传输以保证其承若的可靠服务
TCP服务必须可以重传超时时间内未收到的TCP报文段
为此,TCP模块为每个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动
与TCP超时重传相关的两个内核参数:
/proc/sys/net/ipv4/tcp_retries1:最少执行的重传次数
proc/sys/net/ipv4/tcp_retries2:作多执行的重传次数默认值15

TCP协议和UDP协议的区别是什么


TCP协议是有链接的,有链接的意思是开始传输实际数据以前TCP的客户端和服务器端必须经过三次握手创建链接,会话结束以后也要结束链接。
    而UDP是无链接的  

    TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,
    可是UDP不保证按序到达,甚至不保证到达,只是努力交付,即使是按序发送的序列,也不保证按序送到。

CP协议PORT


传输层经过port号,确认应用层协议
tcp :传输控制协议,面向链接协议:通讯前须要创建虚拟链路:结束后拆除链路   0-65535
udp:无链接的协议  0-65535
IANA:互联网数字分配机构(负责域名;数字资源;协议分配)
    0-1023:系统端口或特权端口(仅管理员可用)总所周知,永久的分配个固定 的系统应用使用  22(ssh)80(http) 443(https)
    1024-49125:     用户端口或注册端口但要求不严格
    49152-65535:动态端口或私有端口,客户端程序随机使用端口
    其范围的定义:/proc/sys/net/ipv4/ip_local_port_range

Internet协议特征


运行与OSI网络层
面向无链接的协议
独立处理数据包
分层编址
尽力而为传输
无数据恢复功能

单播多播广播


处地址类别外,还能够根据传输的信息特征将IP地址分为单播,多播,广播。主机使用IP地址进行一对一(单播),一对多(多播),或一对全部(广播)的通讯
            单播:单播地址是IP网络中最多见的。包含单播地址的分组发送给特定主机,
            多播:多播地址让原设备可以将元分组发送给一组设备
            广播:广播分组的目标IP地址的主机部分全为1 ,这觉得着本地网络(广播域)中的全部主机都将接收并查看该分组

ARP地址解析协议:

IP PDU报头


版本:占4位,指IP协议的版本目前的IP协议版本号为4
首部长度:占4位,可表示的最大数值是15个单位,一个单位为四个字节,所以IP的首部长度的最大数值是60个字节
区分服务:占8位用来得到更好的服务,在旧标准中叫作服务类型,到实际上未被使用过,后更名为区分服务,只有在使用区分服务时,这个字段才起做用,通常的状况下都不使用
总长度:占16位,指首部和数据之和的长度,单位为字节,所以数据报的最大长度为65535字节,总长度不能超过最大传输单元MTU
标识:占16位它是一个计数器,一般,没发送一个只有当报文,该值会加1 ,也用于数据包分片,自同一个包的若干分片中,该值是相同的
标志:占3位,目前只有后两位有意义
DF:中间的一位,只有当DF=1是才容许分片。
MF:最高位,MF=1表示后面还有分片,表示最后一个分片
片偏移:占12位,指较长的分组 在分片后,该分片在原分组中的相对位置,片偏移以8个字节为偏移单位
生存时间:占8位,即为TTL数据报在网络中可经过的路由器的最大值,TTL字段是有发送端初始设置一个8bit字节,推荐的初始值由分配数字RFC指定,当前值为64 发送ICMP回显应答是=时常常把TTL设为最大值255
协议:占8位,指出此数据宝携带数据使用何种协议以便目的主机的IP层将数据部分上交给哪一个处理过程,1表示ICMP协议,2表示为IGMP协议 ,6表示TCP协议,17表示为UDP协议
首部检验和:占16位,只验证数据报的首部不检验数据部分,这里不采用CRC检验码而采用简单的计算方法
原地址和目标地址:都各自占4个字节,分别记录原地址和目的地址

IP地址


他们可惟一标识IP网络中的每一台设备
每台主机(计算机,网络设备,外围设备)必须具备惟一的地址
IP地址有两部分组成:
    标识网络
    每一个网络分配一个ID
主机ID:
    标识单个主机
    有组织非配给各设备

IP地址分类


A类:
    0 000 0000 - 0111 1111:1-127 
    网络数:126,127
    每一个网络中的主机数:2^24-2
    默认子网掩码:255.0.0.0
    私网地址:10.0.0.0
B类:
    10 00 0000 - 10 11 1111: 128-191
    网络数:2^14
    每一个网络中的主机数:2^16 -2
    默认子网掩码:255.255.0.0
    私网地址:172.16.0.0-172.31.0.0
C类:
    110 0 0000 -110 1 1111:192-223
    网络数:2^21
    每一个网络中的主机数:2^8-2
    默认子网掩码:255,255,255.0
D类:组播
E类:240-255
相关文章
相关标签/搜索