为了使多台计算机可以互相连接通信交流,TCP/IP协议就产生了。
TCP/IP 不是一个协议,而是多个协议族的统称,包含多个协议:IP协议,TCP协议,以及HTTP协议,FTP,
UDP,SMTP,POP3等众多协议。
TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议和网络协议的简称
该协议有2种模型,OSI 7层模型和TCP/IP 4层模型。如图:
四层模型下:
应用层:应用程序通过这层来访问网络。FTP,HTTP,DNS,TELENT协议
- 传输层:TCP 和UDP 协议
- 网络层:IP协议、ARP、ICMP
网络接口层:是TCP/IP协议的基层,复制数据帧的发送和接受。
每一个ip地址是一个32bit的数字,被分为数字 由0-255 组成。分为4组,最长的有12个数字组成。因为记忆12为数字较为困难,
一般使用不需记忆IP,对该IP 起一个别名 --域名。 IP和域名则形成了一一对应的关系,把这个关系存储在域名服务系统(DNS)中。Domain Name System
MAC地址 :Media Access Control ,物理地址,硬件地址,定义互联网中设备的位置。
在四层模型中,网络层管理IP地址,链路层复制管理MAC 地址。每个网络位置有专属的IP地址,每个主机也有专属的MAC地址
封装:应用程序发送数据,数据在协议层当中由顶向下通过每一层,每一层都对数据添加头部或者尾部信息,这个添加了头部或者尾部的消息叫做 协议数据单元(Protocol Data Unit)
一层:物理层,PDU数据位-bit
二层:数据链路层 PDU数据帧-frame
三层 :网络层 PDU数据包-packet
四层:传输层 PDU数据段-segment
五层:数据 data
如图:
分用 :当主机收到一个数据帧时,数据就从协议层 底层网上,通过每一层后,去掉每一层添加的头部或者尾部,与封装相反
传输层协议:从网络协议层看,通信的两端是2台主机,ip数据报的头部标明主机的ip地址,从传输层看,是
发送方主机的某一个进程和接收方主机的某一个进程在交换数据。所以 严格说来,通信的双方是进程。
TCP/IP 协议栈传输层有2个重要协议-UDP和TCP
UDP :user datagram protocol 用户数据报协议,主要特点:
- 无连接状态,发送数据前无需建立链接 减少系统开销和延时
- 高效率,尽最大能力发送数据交付,但不保证可靠性,可能会丢失数据
- 没有拥塞机制,出现拥塞时,发送方不会降低发送速率。(视频,ip电话等),出现拥塞时会丢失数据,若不抛弃丢失的数据,会造成时延的积累。
- 支持一对一,一对多,多对一 和多对多的交互通信。
TCP协议 : 和UDP 同在传输层
- 可靠的数据传输服务,面向连接。(三次握手,四次挥手)
- 点对点,一条tcp链接只能链接2个端点
- 可靠传输,无差错,不丢失,不重复 按照顺序传输
- 全双工通信,允许双方同时接受发送消息
- 面向字节流,仅把数据看作一连串的字节序列,不保证接收方和发送方数据的大小对应关系
tcp 可靠传输的实现 :
首先 tcp报文端的长度是可变的,可以根据接收方和发送方的缓存和网络状态进行实时调整,接收到数据后,将会反馈一个确认消息,而发送方在发送一个报文段后,就会启动一个定时器,等待接收方的反馈消息,如果一定时间内没有收到这个反馈消息,发送方就会将这个报文段重新发送 (超时重传)。在整个过程中,会对数据进行头部和尾部的校验,若果校验后发现报文端有差错,那么这个已经接受到的报文端将会被丢弃,不会返回 确认消息,就等待着发送方超时重传该报文段。
此外 tcp还会将数据按照字节排序,报文段中有序号,按照顺序进行发送,保证顺序正确性。还可以提供流量控制,tcp链接的每一方都有收发缓存。tcp的接收端只允许另一端发送接收端缓冲区中的数据,防止较快主机致使较慢主机的缓冲区溢出。
超时重传:
TCP 规定,接收者收到数据报文段后,需回复一个确认报文段,以告知发送者数据已经收到。而发送者如果一段时间内(超时计时器)没有收到确认报文段,便重复发送。
为了实现超时间重传,需要注意:
-
发送者发送一个报文段后,暂时保存该报文段的副本,为发生超时重传时使用,收到确认报文后删除该报文段。
-
确认报文段也需要序号,才能明确是发出去的哪个数据报得到了确认。
-
超时计时器比传输往返时间略长,但具体值是不确定的,根据网络情况而变。