-
TCP/IP网络协议简介
TCP/IP(Transmission Control Protocol/Internet Protocol)中文翻译为传输控制协议/因特网互联协议。TCP/IP协议是当前流行的网络传输协议框架,但是严格的讲它是一个协议族群,TCP/IP是它的总称。 -
TCP/IP协议分层框架
我记得上高中做数学题的时候,老师总是说,看完题先画个图,简单明了,咱么也贯彻一下,话不多说,直接上图。这张图有点丑哈
链路层:
对于计算机来说单个的0或者1是没有意义的,就像世界上只有男人或者只有女人?咳。。。扯远了,链路层以字节为单位把0/1进行分组,定义数据帧,写入源和目标机器的物理地址、数据、校验位来传输数据。报文结构如下图
网络层:
根据IP定义网络地址,区分网段。子网内根据地址解析协议(ARP)进行MAC寻址,子网外进行路由转发数据包,这个数据包就是IP数据包。其中,IP是面向无连接、无状态的,没有额外的机制保证发送的包是否到达,主要功能是在WLAN内进行路由寻址。传输层:
数据包通过网络层发送到目标计算机后,应用程序在传输层定义逻辑端口,确认身份后,将数据包交给应用程序,实现端口到端口间通信。TCP就在这一层,TCP是一种面向连接、确保数据在端到端之间可靠传输的协议。
应用层:
传输层的数据到达应用程序时,以某种统一规定的协议格式解读数据。比如。E-mail在各个公司呈现的管理页面基本上都不怎么一样,但是SMTP已定规定了要填写邮编和收信人信息。
总结:程序在发送消息的时候,应用层按既定的协议打包数据,随后又传输层加上双方各自的端口号。由网络层加上双方的IP地址,由链路层加上双方的MAC地址,并将数据拆成数据帧,经过多个路由器和网关后,到达目标机器。
3.建立TCP连接
面向连接是指在发送数据前需要建立一条虚拟的链路(或通道?),然后让数据在这条链路上“流动”完成传输。为了确保数据的可靠性,不仅需要对发出的每一个字节进行编号确认,校验每一个数据包的有效性,在出现超时情况下进行重传,还需要通过实现滑动窗口和拥塞控制等机制,避免网络状况恶化而最终影响数据传输的极端情形。每个TCP数据包是封装在IP包中的,每一个IP头的后面紧接着的事TCP头,最直接的体现就是访问一个服务的时候需要IP加上端口号。
TCP三次握手创建连接(《码出高效 java开发手册》):
三次握手讲的事建立连接的三个步骤:
1.A机器发出一个数据包并将SYN置为1,表示希望建立连接。这个包中的序列号假设为x。
2.B机器收到A机器发过来的数据包后,通过SYN得知这是一个建立连接的请求,于是发送一个响应包并将SYN和ACK标记都置1.假设这个包中的序列是y,而确认序列号必须是x+1,表示收到了A发过来的SYN。在TCP中,SYN被当作数据部分的一个字节。
3.A收到B响应包后需要进行确认,确认保重将ACK置为1,并将确认序列号设置为y+1,表示收到了来自B的SYN。
两个目的:
信息对等和防止超时。
三次握手确认信息表:
- TCP断开连接
正所谓相爱容易分手难,建立连接需要三个步骤,而分开需要四个步骤。可以用比较通俗的说法进行描述一下。(摘自《码出高效 java开发手册》)
男:我们分手吧。
女:好的,我的东西收拾完,发信息给你。(此时男生不能再拥抱女生)
(一个小时后)
女:我收拾好了,分手吧。(此时女生不能再拥抱男生)
男:好的 (此时,双发约定两个月过渡期后,才可以找新的对象)
暂时先说这么多,有兴趣的朋友可以去再去研究一下四次的具体步骤,这里就不赘述了。