先说一下七层协议和四层协议
会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
这层协议的代表包括:Telnet、FTP、HTTP、SNMP等。
OSI中的层
|
功能
|
TCP/IP协议族
|
---|---|---|
应用层
|
文件传输,电子邮件,文件服务,虚拟终端
|
TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
|
表示层
|
数据格式化,代码转换,数据加密
|
没有协议
|
会话层
|
解除或建立与别的接点的联系
|
没有协议
|
传输层
|
提供端对端的接口
|
TCP,UDP
|
网络层
|
为数据包选择路由
|
IP,ICMP,OSPF,EIGRP,IGMP,RIP
|
数据链路层
|
传输有地址的帧以及错误检测功能
|
SLIP,CSLIP,PPP,MTU,ARP,RARP
|
物理层
|
以二进制数据形式在物理媒体上传输数据
|
ISO2110,IEEE802,IEEE802.2
|
TCP/IP
|
OSI
|
---|---|
应用层
|
应用层
表示层
会话层
|
主机到主机层(TCP)(又称传输层)
|
传输层
|
网络层(IP)(又称互联层)
|
网络层
|
网络接口层(又称链路层)
|
数据链路层
|
物理层
|
定义物理介质的各种特性
数据链路协议(FDDI,PPP)等。
网络层:
负责计算机之间的通信
IP
传输层:
提供应用程序间的通信
TCP、UDP
应用层:
向用户提供一组常用的应用程序
TELNET、FTP、SMTP、WWW等。
TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议。
由上面的内容我们可以看出来,tcp协议在传输层,在网络层之上,应用层之下。
不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是网络层不提供这样的流机制,而是提供不可靠的包交换。
位码即tcp标志位,有6种标示:
SYN(synchronous建立联机) 当SYN=1,表明这是一个连接请求或连接接受报文。
ACK(acknowledgement 确认) 只有当ACK=1时确认号才有效。
PSH(push传送) 当PSH=1,表明应尽快交付给应用进程。
FIN(finish结束) 当FIN=1,表明此报文字段已经发送完毕,并要求释放连接。
RST(reset重置) 当RST=1,表明连接出现差错,需要释放连接,通知一下对方。
URG(urgent紧急) 当URG=1,表明紧急指针字段有效,它告诉系统此报文段中有紧急数据,应尽快传送。
Sequence number(顺序号码)
Acknowledge number(确认号码)
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机。
第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
完成三次握手,主机A与主机B开始传送数据。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据.
当目的主机接收到数据包后,将根据报文首部的目的端口号(你看看上面有个图),把数据发送到相应端口,而与此端口相对应的那个进程将会领取数据并等待下一组数据的到来。