您的位置:首页 > 理论基础 > 计算机网络

TCP/TP协议备忘录

2016-07-26 23:59 344 查看

参考文献

《TCP/IP详解卷一》

http://m.blog.csdn.net/article/details?id=50945225

wiki about IP

TCP/IP各层的结构与功能



(1)链路层:包括操作系统中的设备驱动程序和网络接口卡,处理与传输媒介的物理接口细节。

(2)网络层:提供路由和寻址的功能,使两终端系统能够互连且决定最佳路径,并具有一定的拥塞控制和流量控制的能力。 (点对点)

(3)运输层:为两台主机上的应用程序提供端到端的通信。(端对端指的是在数据传输前,经过各种各样的交换设备,在两端设备间建立一条链路,就像它们是直接相连的一样,链路建立后,发送端就可以发送数据,直至数据发送完毕,接收端确认接收成功)

(4)应用层:负责处理特定的应用程序细节。

UDP的报文结构



UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地。

TCP报文结构



每个TCP首部都包含源端目的端的端口号,用于寻找发端和收端的用户进程,这个两个值加上IP首部的源端IP地址和目的端IP地址唯一确定一个TCP连接。

有时,一个IP地址和一个端口号也称为一个插口(socket)。插口对(socket pair, 包含客户IP地址、客户端口号、服务器IP地址和服务器端口号的四元组)可唯一确定互联网络中每个TCP连接的双方。

TCP提供一种面向连接的、可靠的字节流服务。TCP通过下列方式来提供可靠性

应用数据被分割成TCP认为最合适发送的数据块。这和UDP不同,应用程序产生的数据报长度将保持不变;

当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段(超时重发);

当TCP收到发自TCP连接的另一端数据,它将发送一个确认;

TCP将保持它首部和数据的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,将丢弃这个报文段和不确认收到此报文段(希望发端超时重发);

IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序,如果必要将对收到的数据进行重新排序;

TCP的接收端会丢弃重复的数据;

TCP可以提供流量控制。

TCP连接的建立与终止

TCP首部标志

SYN(synchronous):TCP首部中的同步序号标志;

ACK(acknowledgement):TCP首部中的确认标志;

RST(reset):连接重置,连接被关闭;

PSH(push):TCP首部中的急迫标志,尽可能快地将数据发往接受进程;

FIN(finish):TCP首部中的结束标志,发送方完成数据发送;

URG(urgent):TCP首部中的紧急指针标志。

建立TCP连接(三次握手)

第一次握手:客户端发送syn段(syn=j,j为初始序号ISN)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn段,发回ACK段确认客户的SYN(ack=j+1),同时自己也发送一个SYN段(syn=k,k为初始序号ISN),即SYN+ACK,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK段,向服务器发送确认段ACK(ack=k+1),发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

终止TCP连接(四次挥手)

第一次挥手:客户端发送FIN(ISN=k),用来关闭从客户到服务器的数据传送,并进入FIN_WAIT状态;

第二次挥手:当服务器收到FIN,它发回一个ACK(ISN=k+1)进行确认,并进入CLOSE_WAIT状态;(客户端仍处于FIN_WAIT状态,等待服务器端的FIN);

第三次挥手:当服务器端完成自己的数据发送,向客户端发送FIN,关闭从服务器端到客户端的数据传送,并进入LAST_ACK状态;

第四次挥手:当客户端接收到FIN报文后,向服务器端发回ACK进行确认,并进入TIME_WAIT状态(怕服务器端没有收到ACK而进行重传),等待一会儿没有收到服务器端的重传,确认对方已关闭,则TCP连接正式关闭,所有的资源都被释放。

TIME_WAIT状态的意义

假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此处于LAST_ACK状态下的服务器可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是客户端用来重发可能丢失的ACK报文。通常时长为2MSL(最长报文生存周期)。

TCP流量控制和拥塞控制

流量控制(滑动窗口协议):所谓的流量控制就是让发送方的发送速率不要太快,让接收方来得及接受。接收方不必确认收到的每一个分组,传回的ACK是累积的->表示接受到了一直到确认序号减一之前的所有字节。



拥塞控制:避免过多的数据注入到网络中,防止路由器或链路过载。

(1)慢启动:为发送方的TCP增加了一个拥塞窗口(cwnd),当与另一主机建立TCP连接时,拥塞窗口被初始化为1个报文段,每收到一个ACK拥塞窗口就增加1个报文段。发送方取拥塞窗口与通告窗口中的最小值作为发送上限。拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。

(2)拥塞避免算法:引入一个慢启动阈值ssthresh的概念,当cwnd小于ssthresh的时候,TCP处于慢启动状态,否则,进入拥塞避免阶段。

(3)快速重传

(4)快速恢复

TCP与UDP的区别

(1)TCP是面向连接的(发送数据前必须要建立连接),三次握手保证了连接的可靠性;UDP是无连接、不可靠的(需要自己做数据校验);

(2)TCP的传输速率相对较低,UDP传输效率较高(由于不必进行收发的确认,开销较小);

(3)TCP保证了消息的有序性(接收到时可能顺序错误,但TCP协议可以进行排序),UDP无法保证;

(4)TCP是面向字节流的,数据流间无边界(多次发送,一次接受),UDP是面向报文的,有边界;

(5)TCP有流量控制(滑动窗口)和拥塞控制(慢开始、快重传、拥塞避免、快恢复),UDP无。

TCP与UDP的适用性

TCP是面向连接的,可靠的,缓慢的,可靠交付以及保证消息顺序的,而UDP是无连接的,不可靠的,没有序列保证,但是一个快速传输的协议。如果你不想丢失任何消息,使用TCP协议(绝大多数协议都是基于TCP的,如HTTP,FTP,Telnet等)。而UDP能够高速传输数据,并且丢失少量的数据包是可以接受的,如视频流或在线多玩家游戏。对于基于TCP/UDP协议,运行在Linux上的应用,需要牢记的基本网络命令,如Telnet(远程登录)和netstat(显示网络相关的各种信息),他们极大的帮助调试和排除任何连接问题。

ICMP与Ping

ICMP(网络控制报文协议)通常被认为是IP层的一个组成部分。它用于发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,令管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。(查询报文/差错报文)

Ping是对两个TCP/IP系统连通性进行测试的基本工具。该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答.程序会按时间和成功响应的次数估算丢失数据包率(丢包率)和数据包往返时间(网络时延,Round-trip delay time)。

IP地址分类

IPv4使用32位(4字节)地址。





除了IP地址外,主机还需要知道有多少比特用于子网号及多少比特用于主机号。这是通过子网掩码来确定的,其中值为‘1’的留给网络号和子网号,值为‘0’的留给主机号。

主机标识的各个位不能都为“1”,如果所有位都为“1”,则该机地址是广播地址,而非主机的地址。主机标识的各个位不能都为“0”,如果各个位都为“0”,则表示“只有这个网络”,而这个网络上没有任何主机。 还有很多特殊IP地址,如127.0.0.0等。

常用的端口号

20/21:FTP协议

23:Telnet

25:SMTP(简单邮件传输协议)

80:HTTP
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: