TCP/IP协议

来源:互联网 发布:php json转数组为null 编辑:程序博客网 时间:2024/06/06 14:19

一、TCP/IP四层

1.链路层:用来处理连接网络的硬件部分,包括控制操作系统,硬件的设备驱动,NIC(NetWork Interface Card,网络适配器,即网卡),及光钎等物理可见的部分(还包括连接器等一切传播媒介)。硬件上的范畴均在链路层的作用范围内。

2.网络层:网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎么样的路径(所谓的传输路线)到达对方的计算机,并把数据包传送给对方。与对方计算机之间通过多态计算机或网络设备进行传输时,网络层起的作用就是在众多的选项内选择一条传输路线。

3.传输层:TCP(Transmission Control Protocol 传输控制协议)

                 UDP(User Data Protocol  用户数据报协议)

4.应用层:FTP(File Transfer Protocol 文件传输协议)

                 DNS(Domain Name System 域名系统)

                 HTTP协议


二、TCP/IP通信数据流



三、HTTP关系密切的协议:IP、TCP和DNS

1.IP协议:IP(Internet protocol),这里的Ip不是我们通常说的192.168.1.1。这个IP指的是一种协议,而后面的数字值是IP地址。IP协议的作用在于把各种数据包准确无误的传递给对方,其中两个最重要的条件是IP地址和MAC地址(Media Access Control Address)。由于IP地址是稀有资源,不可能每个人都拥有一个IP地址,所以我们通常IP地址是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址。而MAC地址是全球唯一的,除去人为因素不可能重复。

2.TCP协议:如果说IP协议是找到对方的详细地址。那么TCP协议就是安全的把东西带给对方。各有分工,互不冲突。按层次分,TCP属于传输层,提供可靠的字节流服务。字节流服务(Byte Stream Service)是指为了方便传输,将大块数据分隔成以报文断(sgement)为单位的数据包进行管理,而可靠的传输服务是指能够把数据准确可靠地传给对方。简而言之,TCP协议为了更容易传输大数据才把数据分割,而且TCP协议能够确认数据最终是否送达到对方。

3.三次握手

三次握手(three wayhandshake)即建立TCP连接,需要客户端个服务端总共发送3个包以确认连接的建立。

已知:

-序号:seq序号,占32位,用来表示从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记

-确认序号:ACK序号,占32位,只有ACK标志为1时,确认序号字段才有效,ack=seq+1

-标志位有6个,URG、ACK、PSH、RST、SYN、FIN

-ACK:确认序号有效

-SYN:发起一个新连接

-FIN:释放一个新连接

-RST:重置一个连接

-URG:紧急指针(urgent pointer)有效

-PSH:接收方应该尽快将这个报文交给应用层


(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1.随机产生一个seq=k;并将数据包发送给Client确认连接请求。

(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确,将ACK置为1,ack=k+1,并将数据包发射到Server,Server检查ack是否为k+1,ACK是否为1,如果正确,则连接成功,Client和Server进入ESTABLEISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。


4.四次挥手

由于TCP连接时全双工的,因此,每个方向都必须单独进行关闭,这一原则是当一方完成数据发送后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会收到数据了,但是在这个TCP连接上仍能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。



(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传输,Client进入FIN_WAIT状态

(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,序号为k+1

(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传输,Server进入LAST_ACK状态。

(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT,接着发送一个ACK给Server,确认序号ack=j+1,Server进入CLOSED状态,完成四次挥手。

5.DNS(Domain names System):和HTTP协议一样是处于应用层的服务,提供域名解析服务