学习TCP/IP
一丶网络协议
在计算机诞生之后,从单机模式应用发展到将多台计算机连接起来,形成计算机网络。计算机网络需要解决的第一件事就是如何无障碍的发送和接收数据。科学家们通过研究"协商定义"出了相应的可相互理解的协议来接收和发送数据。各大厂商的设备按照协议中的方式将数据进行打包和解包,发送和接收数据,使得不同厂商的设备在不同类型的操作系统上实现顺畅的网络通信。
二丶TCP/IP协议
TCP/IP(Transmission Control Protocol / Internet Protocol) 中文译为传输控制协议/因特网互联协议,它是当前流行的网络传输协议框架,从严格意义来说,它是一个协议族,因为TCP/IP是其中最为核心的协议,所以就把该协议族称为TCP/IP。
TCP/IP协议分层框架如下:
TCP/IP协议分层框架
1. 链路层:
单个0、1是没有意义的,链路层以字节为单位把0与1进行分组,定义数据帧,写入源和目标机器的物理地址、数据、校验位来传输数据。图1是以太网的帧协议。
链路层报文结构
MAC地址6个字节共48位,通常用十六进制表示。使用ifconfig -a命令即可看到MAC地址。前24位由管理机构统一分配,后24位由厂家自己分配,保证网卡全球唯一。网卡就像家庭地址一样,是计算机世界范围内的唯一标识。
2. 网络层:
根据IP定义网络地址,区分网段。子网内根据地址解析协议(ARP)进行MAC寻址,子网外进行路由转发数据包,这个数据包即IP数据包。
3. 传输层:
实现端口到端口的通信。数据包通过网络层被发送到目标计算机后,将会被交给应用程序。
最典型的传输层协议是UDP和TCP。UDP只是在IP数据包上端口等部分信息,是面向无连接的,是不可靠传输,多用于视频通信、电话会议等(即使少一帧数据也无妨)。TCP是面向连接的,是一种端对端的通过失败重传机制实现的可靠传输数据传输方式,给人的感觉就像是有一条固定的通路承载着数据的可靠传输。
4. 应用层:
传输层的数据到达应用程序时,可以通过某种统一规定的协议格式解读。从另一种角度来看,应用程序将数据以某种统一规定的协议格式打包然后交给传输层传输。比如,E-mail在各个公司的程序界面、操作、管理方式都不一样,但是都能够读取邮件内容,是因为SMTP协议就像传统的书信格式一样,安规定填写邮编及收信人信息。
总结,程序在发送消息时,应用层按既定的协议打包数据,随后由传输层加上双方的端口号,由网络层加上双方的IP地址,由链路层加上双方的MAC地址,并将数据拆分成数据帧,经过多个路由器和网关后,到达目的机器。
三丶IP协议
IP是面向无连接的、无状态的,没有额外的机制保证发送的包是否有序。
IP规定了IP地址的格式,该地址相当于在逻辑上进行了网段的划分,给每台计算机额外设置了唯一的详细地址。
既然链路层可以通过唯一的MAC地址来找到机器,为什么还需要通过唯一的IP地址再来标识?简单地来说,在世界范围内,不可能通过广播的方式,从数以万计的计算机中找到目标MAC地址的计算机而不超时。
IP地址属于网络层,主要功能在WLAN内进行路由寻址,选择最佳路由。
IP报文格式如图:
IP报文格式
四、TCP
TCP(Transmission Control Protocol)传输控制协议,是一种面向连接、确保数据在端到端间可靠传输的协议。
所谓的面向连接,就是在不可靠的网络上,通过一种失败重传的机制,确保数据的可靠传输,从而像是建立了一条虚拟的链路。
为了确保数据的可靠传输,不仅需要对每个字节进行编号确认,校验每一个数据包的有效性,在出现超时进行重传,还需要通过实现滑动窗口和拥塞控制等机制,避免网络状况恶化而最终影响数据传输的极端情形。
TCP报文格式如下:
TCP报文格式
TCP是面向连接的,因此有服务端和客户端之分。需要服务端现在相应的端口上进行监听,准备好接受客户端发起的建立连接请求。当客户端发起第一个请求连接的TCP包时,目标机器端口就是服务端监听的端口,比如代表HTTP服务的80端口,代表SSH服务的22端口,代表HTTPS服务的443端口。可以使用netstat命令查看已建立连接的信息。
TCP的FLAG位由6个bit组成,分别代表ACK、SYN、FIN、URG、PSH、RST,都以置1表示有效。
SYN(Synchronize Sequence Numbers) 用作建立连接时的同步信号;ACK(Acknowledgement) 用于对收到数据的确认,所确认的数据由序列号表示;FIN(Finish)表示后面没有数据发送,通常意味着所建立的连接需要关闭。
五丶总结
链路层: 屏蔽物理层的复杂性,向上提供同一稳定的接口; 将数据封装成数据帧,写入源和目标机器的物理地址、数据、校验位来传输数据.
网络层: 根据IP定义网络地址,划分网段.给计算机设置额外的详细地址,目的是为了可以在数以千万计的计算机中快速找到目标计算机.
传输层:定义端对端的数据传输方式,向上层屏蔽底层的通信细节.该层有面向连接的可靠的传输协议TCP, 也有面向无连接的不可靠的传输协议UDP.
应用层: 为不同的应用定义特定的数据格式,可以按照既定的数据格式打包数据交给传输层,或者按既定的数据格式解读数据.
学习资料:
《码出高效 Java开发手册》1.5 TCP/IP