- ISO/OSI模型与TCP/IP模型
图中左边是ISO/OSI模型,右边是TCP/IP模型。可以看到ISO/OSI模型复杂度较高,实现起来不容易。因此业界更偏向使用TCP/IP模型。
2.TCP/IP层次结构
TCP/IP分为四层,应用层,传输层,网际互联层,网络接入层。每一层次都定义了相关协议,完成传输过程中的部分功能。比如应用层中http、ftp、smtp、pop协议,传输层udp、tcp协议,网络层中ip协议,链路层中以太网协议。
- 应用层
应用层是最顶端的协议,用户可以看得见摸得着直接交互的。比如http协议,我们选择要发的内容,http协议帮我们封装成不同机器交互在应用层可识别的数据(加上http头部信息),而后交由传输层。
- 传输层
传输层的功能是使源主机和目标主机上的对等实体可以进行会话。根据类别不同,可以实现可靠安全传输(tcp),或是尽最大努力交付的传输(udp)。传输层也确保着应用层协议的解析类别,通过端口控制,使得应用层可以确定数据解析的具体应用。
TCP是面向连接的安全的协议,tcp发送数据段前要先建立连接,发送完成后需要断开连接。通过停止确认与失败重传机制确认数据传输的可靠性,在tcp OPTION中有OPTION 19 可以使用将TCP数据段和pre-shared password作为共同输入的MD5 hash密钥确认tcp的安全性,而MD5加密在现有的技术中已经被破解,因此在OPTION 29中定义了可以使用其他加密算法(SHA)
TCP数据段格式如下
在这里面值得关注的内容有端口号,顺序号,确认号,窗口大小,校验和,标志位。端口号确定应用层具体的应用协议,顺序号则确定接收方可以对数据按序解析,确认号是用来确定接收方向发送方确认数据已经接收,窗口大小则实现了流量控制(发送方不会过快发送数据导致接收方缓存区溢出),校验和则确认了接收数据的准确性,标志位则反映了当前数据传输的意义(建立连接、断开连接或者其它意义)。
UDP则是一种无连接,不可靠的传输机制,它只是尽最大努力的交付用户数据包。数据被冠以源、目标端口号等UDP报头字段后直接发往目的主机。其结构如下
- 网络层
网络层统一使用ip协议,要求每台联网主机都有唯一的ip地址可供访问,它的功能是把分组发往目标网络或主机。
IP协议是TCP/IP模型中最核心的协议,它是无连接不可靠的。其结构如下
在这个结构中,最重要的几个字段为地址、协议、TTL、分片偏移量、校验和。地址指明数据发送的来源ip和去向ip,协议表明其上传使用的协议类型(TCP or UDP),TTL(time to live)表明该数据报在发送过程中最大路由次数,分片偏移量是为以太网协议服务的,校验和则可以确定数据报的正确性。
- 链路层
课程中,习惯将该层分为两层,一是数据链路层,规定以太网协议等内容;二是物理层,规定数据发送过程中的电气特性。
这里我们谈谈以太网协议。被以太网封装的数据为帧,由于线路的传输影响(避免信号冲突),以太网限制了帧的最大最小长度,不算头部的18字节,数据长度最短为46字节,最长为1500字节。所以当ip数据报长度大于1500字节时,就会被要求分片,所以ip头部中的分片偏移就是为了满足这个地方的要求。而数据长度不够46字节的情况下,可以使用字节填充方法。
以太网帧封装了mac地址,确定数据发送方mac和数据接收方mac,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。。mac地址是机器唯一地址,每一个机器在出厂时候都会分配一个唯一mac地址。在一个稳定局域网内,mac地址和ip地址是一一对应的;对于一个刚加入局域网的机器,首先内核会向本局域网内广播一个请求分组,发送信息包含本机ip地址,本机mac地址,目标ip地址;局域网内的所有主机接收到分组后,比较ip,如果不是自己的ip则丢弃,如果是则回送自己的mac信息,同时将该主机mac和ip加入自己的arp缓存中。
3.http与TCP/IP
http发包过程:http发送请求,tcp三次握手建立连接,客服端服务器Q/A,tcp四次挥手断开连接。可以看到http是无连接的协议。底层使用tcp交互。
tcp三次握手与四次挥手
这里要注意几个状态,SYN_SENT、SYN_RCVD、ESTABLISHED、FIN_WAIT_1、CLOSE_WAIT、FIN_WAIT_2、TIME_WAIT、CLOSED。
CLOSE_WAIT发生在服务器确认客户端要断开连接但是还没有主动请求断开连接时,这个时间段主要是服务器做一些收尾工作。如果一个服务器存在太多CLOSE_WAIT,则需要检查服务器代码是否合理。TIME_WAIT出现在当客户端确认了服务器发送的断开连接并回复后的一段时间,其中TIME_WAIT=2MSL(maximum segment lifetime),主要是为了确认网络中的所有基于此tcp的发包都已经消失,便于tcp在重复利用时不会出现冲突。
4.参考文献
a. http://www.cnblogs.com/BlueTzar/articles/811160.html
b. http://blog.csdn.net/tigerjibo/article/details/7351992
c. http://www.360doc.com/content/14/0725/20/1073512_397054861.shtml