我的TCP学习笔记

TCP/IP协议按照层次分为以下四层。应用层、传输层、网络层、数据链路层

如何实现网络同信:首先一个通信的目标,就是说要有一个通信的地址,然后有地址还不行,需要有一个明确的人,对于机器来说就是机器的网卡识别号。通信地址就是IP地址,网卡的识别号就是MAC地址。

①  确定IP地址,我们就需要用到DNS协议,通常DNS的IP地址我们是规定好的,如果要访问一个网址,我们就需要向DNS发送请求,请求查询所要访问的域名的IP地址,向DNS发送一个数据包端口号是53,那么DNS服务器就会做出响应,返回当前域名的IP地址。

②确定MAC地址,我们需要用到ARP协议。根据IP地址的分类,我们可以分为子网络下的通信和非子网络下的通信,子网络的通信相当于说目标机的IP地址在你网络所在的路由器下面,那么怎么判断呢??这个时候我们就用到子网掩码了,本机会将自身的IP地址和子网掩码作二进制的与运算,得到结果1,然后将目标机的IP地址与子网掩码再做一个二级制与运算,得到一个结果2,然后将结果1和结果2作与运算,如果结果是本身,那么说明本机的IP与目标机的IP在子网络下,否则不在同一个子网络。如果是子网络通信:这个时候,客户端就可以直接向子网络所在的路由网上广播。ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。

如果不在同一个子网络下,那么本机向网关服务器发送数据包,MAC地址是网关的MAC地址,网关收到这条数据后,根据路由协议找到目标机IP所在的子网络,然后通过ARP协议收到MAC地址后,反方向将数据送回给本机。

确定了IP地址之后,我们就需要知道,数据是怎么准确无误的从本机传输到目标机的,这里面包含了众多的协议:TCP协议,IP协议、UDP协议、HTTP协议、以太网协议、DHCP等

TCP协议:用于数据传输,发送数据时对传输的数据进行分割和编号。在接送数据的时候将数据进行拼接。

TCP在与服务器通信的时候,是通过三次握手实现

TCP三次握手

  (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以确认连接请求,Server进入SYN_RCVD状态。

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

三次握手说的直白一点就是客户机向服务器询问是否在线,服务器告诉客户机在线,客户机响应收到响应,准备传送数据

HTTP协议的职责:生成WEB数据请求相关的报文

DHCP协议:

首先,它是一种应用层协议,建立在UDP协议之上,所以整个数据包是这样的:

  (1)最前面的"以太网标头",设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-FF。

  (2)后面的"IP标头",设置发出方的IP地址和接收方的IP地址。这时,对于这两者,本机都不知道。于是,发出方的IP地址就设为0.0.0.0,接收方的IP地址设为255.255.255.255。

  (3)最后的"UDP标头",设置发出方的端口和接收方的端口。这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口。

这个数据包构造完成后,就可以发出了。以太网是广播发送,同一个子网络的每台计算机都收到了这个包。因为接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的IP地址,才能确定是不是发给自己的。当看到发出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服务器知道"这个包是发给我的",而其他计算机就可以丢弃这个包。

接下来,DHCP服务器读出这个包的数据内容,分配好IP地址,发送回去一个"DHCP响应"数据包。这个响应包的结构也是类似的,以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。

新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数

假如我们要访问谷歌网页,那么各个协议的的先后顺序为:

浏览网页用的是HTTP协议,它的整个数据包构造是这样的:

HTTP部分的内容,类似于下面这样:

  GET / HTTP/1.1
  Host: www.google.com
  Connection: keep-alive
  User-Agent: Mozilla/5.0 (Windows NT 6.1) ......
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  Accept-Encoding: gzip,deflate,sdch
  Accept-Language: zh-CN,zh;q=0.8
  Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
  Cookie: ... ...

我们假定这个部分的长度为4960字节,它会被嵌在TCP数据包之中

TCP协议

TCP数据包需要设置端口,接收方(Google)的HTTP端口默认是80,发送方(本机)的端口是一个随机生成的1024-65535之间的整数,假定为51775。

TCP数据包的标头长度为20字节,加上嵌入HTTP的数据包,总长度变为4980字节。

9.6 IP协议

然后,TCP数据包再嵌入IP数据包。IP数据包需要设置双方的IP地址,这是已知的,发送方是192.168.1.100(本机),接收方是172.194.72.105(Google)。

IP数据包的标头长度为20字节,加上嵌入的TCP数据包,总长度变为5000字节。

9.7 以太网协议

最后,IP数据包嵌入以太网数据包。以太网数据包需要设置双方的MAC地址,发送方为本机的网卡MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议得到)。

以太网数据包的数据部分,最大长度为1500字节,而现在的IP数据包长度为5000字节。因此,IP数据包必须分割成四个包。因为每个包都有自己的IP标头(20字节),所以四个包的IP数据包的长度分别为1500、1500、1500、560。

然后服务端通过HTTP协议提取出请求信息,再将反应数据原路返回到客户机,客户机接收反应信息。就完成了一次TCP通信

Int_lin 

2017年7月27日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

int_Paul

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值