计算机运行相同的协议,才能相互通信,这就是传输协议,是数据通信的基础,最开始的是FTP协议
通信实体也是要分层次的,类似与公司一样,都需要分出不同的层次,各个进行不同的工作,分出的层要明确每个层之间的关系,各自要干的事是什么,上下关系是什么
ISO/OSI分层,一共7层,前三层属于链接方式,后四层是端对端方式
1.应用层-----------------网络与应用程序之间的接口
2.表示层-----------------数据表示、安全、压缩
3.会话层-----------------建立、管理、终止会话
4.传输层------格式(数据段Segment)--------识别特定程序(端口号)----------用于网关、协议转化器
TCP和UDP属于传输层
5.网络层------格式(数据包Packet)-----------通过ip地址进行路径选择-----------路由器
网络层对传输层有两种网络服务{
1.面向连接
路径、传输速度确定,因为要连接的对象是知道的,怎么连接,哪个路径啥的都是确定好的,所以速度也就确定了
关注于如何建立链路
2.无连接
路径传输速度都是不确定的,因为对象不知道,无法确定
关注在每一站都建立详细的路由表
}
传统的IP是无连接的,后来的多协议标签交换(MPLS)是面向连接的
网络层的任务{
1.路由选择
面对各种路径时要做出路径选择
2.拥塞控制
避免阻塞,如果阻塞的话,就缓解阻塞,比如丢弃一部分数据或者是进行缓存
3.局域网间互联
让两个数据包在不同的网络之间传递
4.统计控制
}
IP就是网络层协议
自我理解:网络层类似于交警,选择哪个方向是通的,哪个暂停,车多的话指挥交通等
6.数据链路层----------格式(将比特信息封装成数据帧Frame)---------建立撤销网络链接---------网卡、交换机、网桥
将bit流组为帧Frame,进行传输,还有差错检验和纠错机制,以太网就是属于这个
7.物理层-------格式(传输bit流)-----------建立、维护撤销物理连接----------光纤、同轴电缆等
就是传输通道,物理的机械的或者是光电的实际可见的通道
TCP/IP分层,分为4层
对应关系是下图
最核心的是上面的三层,TCP/IP是一个协议组,包含好多的协议,只是TCP/IP是最重要的,tcp是传输协议,ip是网际协议
1.应用层---------FTP/HTTP等
2.传输层---------TCP/UDP
TCP是可靠的,面向连接的协议,是传输控制协议,将一个主机的字节流发送给其他主机{
在发送端:上层传下来的字节流分成报文段传给下层,类似于部门经理,将上面的指示分发,发送给下面的员工
在接收端:把收到的报文重组发送给上层,相当于部门经理将员工的工作总结好报告给经理
}
UDP是不可靠的无连接的协议
3.互联网层-------IP/ICMP
又叫网络层或者是IP层,IP是不可靠的无连接的协议,接受传输层的请求,传输有目的地址的信息。IP给每台计算机分配一个地址,就是咱们常说的IP地址,将信息以IP包的形式传到目的地址,是TCP/IP的核心,IP协议最关键的是路由协议。ICMP是传送IP的控制信息
感觉类似与快递员,收到包裹之后,通过判断每个包裹的目的地,然后准确送到,他自己本身是没有目的地的
4.网络接口层---------以太网等
给互联网层一个接口来传递IP分组,以太网是IP通信中最常见的方式,10Gbit/s以下的以太网一般用于局域网
其中较为重要的是三次握手和四次挥手
TCP的连接和建立都是基于C/S的,就是client/server的,建立需要三次握手,断开需要四次挥手
三次握手
1. client --------连接请求---------> server,client发起请求连接,告诉server我要连接了,请求标志位时SYN=1,说明请求连接,发送序列是SEQ=x,client进入SYN_SEND状态
2. server---------确认请求-------->client ,有SYN=1,知道有请求之后,将SYN=1,ACK=x+1,ACK是确认序号,并且还发送一个SEQ=y,这个SEQ是新的,值可以是新的,这时候server进入SYN_RCVD状态
3. client ---------确认并连接----->server,先是client检查ACK是不是x+1,SYN是否是1,都对的话,就将SYN=1,ACK=y+1,连同数据包一块发给server,server检查ACK是否是y+1,SYN是否是1,都正确的话就连接成功,client和server都进入ESTABLISHED状态
就相当于这样:A对B说,我要来你家,B说我家有人可以来,A接到消息后确定B家有人,就可以去找B了
三次握手之后,就可以传送数据了
四次挥手
1. client--------断开请求发送--------> server,client要断开连接了,先是发送断开的请求,告诉他我要断开,发送标志位fin=1,SEQ=1,ACK=1,client进入FIN_WAIT_1状态
2. sercer-------发送确认-------->client,server知道要断开后,发送确认包,进入CLOSE_WAIT状态
3. server-------断开TCP------>client,发送一个确认,进入LAST_ACK状态
4. client--------确认断开------>server,client接到server的断开请求后,发送一个确认,ACk=y+2,server进入CLOSE状态
相当于:A对B说我们分手吧,B说你确定?,B继续说好分就分,然后A一听,说那就分手吧,结果就断开了
数据的封装分为好几层
数据------加TCP报头(传输层)------>数据段-------加IP报头(网络层)------>数据包--------加数据链路层报头(数据链路层)------>数据帧------->bit,通过网络介质传输