计算机网络
计算机近距离构成的小型网络叫局域网 简称LAN 为了解决信息发送对象的问题,以太网为每台计算机有唯一的媒体访问控制地址,MAC地址
解决冲突 加入随机时间,不同的计算机等待时间不同
指数退避: 传输时检测冲突 会等一秒+随机时间 再次发生冲突2 4 8 16
路由
报文交换 可以用不同路由,使通信更可靠更能容错
消息沿着路由跳转的次数叫“跳数”(hop count) 跳数限制
缺点:报文比较大,会堵塞网络 因为要把整个报文从一站传到下一站后才能继续传递其他报文
解决方法 将大报文分成很多小块,叫“数据包”
报文具体格式由“互联网协议”定义 简称ip
路由器平衡与其他路由器之间的负载 以确保传输可以快速可靠,这叫“阻塞控制”
同一个报文的多个数据包会经过不同线路 到达顺序可能会不一样,这对一些软件是个问题 这就引入了TCP/UDP协议解决乱序问题
分组交换
WAN
互联网 巨型分布式网络,会把数据拆成一个个数据包来传输 数据包(packet)想在互联网传输要符合“互联网协议”的标准,简称ip ip
分为两部分 数据包头部存目标地址, 末端存放数据 当数据包到达电脑时,不知道把包交给哪个程序 用户数据报协议 UDP
IP 负责把数据包送到正确的计算机 UDP 负责把数据包送到正确的程序
UDP报文形式如下:
每个想访问网络的程序,都要想操作系统申请一个端口号,当一个数据包到达接收方的操作系统时,会读UDP头部,读里面的端口号
UDP头部有“校验和”,用于检查数据是否正确,接受方收到数据后,会对数据进行加和,并于UDP头部的“校验和” 对比,以查验数据的正确性
UDP 不提供数据修复或数据重发的机制 接收方知道数据损坏,只能扔掉 同时发送后无法知道数据包是否到达目的地
应用在视频通话
传输控制协议 TCP
所有数据必须到达
TCP 头部也有“端口号”和“校验号”
-
TCP数据包有序号,接受完毕后会重新排序
-
TCP要求接收方的电脑收到数据包并且“校验号”检查无误后,给发送发发一个确认码(ACK),代表收到了。可以同时发多个数据包确认码的成功率和来回时间可以推测网络的拥堵程度
可以同时发送多个数据包
缺点:
-
确认码数据包把数量翻了一倍 (特别是对时间要求很高的程序 射击游戏)
计算机访问一个网站时,需要两个东西:
-
IP地址
-
端口号
DNS
负责把域名和IP地址一一对应
域名结构
网络层级
-
物理层
线路的电信号 无线信号
-
数据链路层
负责操控物理层 媒体访问控制地址(MAC),碰撞检测,指数退避,一些底层协议
-
网络层
各种报文和路由
TCP与UDP
连接与非连接
IP地址+端口号 =套接字socket
TCP的三次握手,传输确认 ,四次挥手
三次握手 是为了解决网络信道不可靠的问题
-
丢包问题
-
乱序问题
为什么不是两次握手?
因为在这两次握手之后,对于客户端来说,发送和接收都没有问题,但是对于服务器,只知道接受没有问题,发送的消息客户端有没有收到,服务器是不知道的,因此需要第三次握手,也就是
相当于嘈杂环境下的对话
——听得到吗?
——嗯,你呢?
——听得到。
传输结束后 客户端 服务端各自发送关闭连接的要求了 四次挥手
客户端 服务端 都能发出主动关闭请求
-
客户端向服务端发送FIN包 自己进入等待1状态 --第一次挥手
-
服务端收到后 发送ACK包 表示自己进入等待状态--第二次挥手
客户端进入终止等待2状态 服务端此时还可以发送未发送的数据 客户端可以接受数据
-
待服务端发送完数据之后 发送一个 Final进入最后确认状态--第三次挥手
-
客户端收到后 回复ACK后 进入超时等待状态,经过超时时间后关闭连接 (防止发送的ACK包丢失) 服务端收到ACK包后 立即关闭连接
男:我们分手吧 女:我想一下 女:我们分手吧 男:好的,现在就结束吧
为啥不是三次挥手?
因为客户端要关闭连接的时候,无法保证服务器已经将数据发送完成,所以此时服务器只能告诉客户端我收到你的关闭请求,知道你的数据发送完成。在服务器把数据发送完成之后,告知客户端,数据发送完了,可以关闭连接。此时,客户端也要应答,同意关闭连接
区别:
TCP: 传输文件 邮件 浏览网页
UDP:域名查询 语音通话 直播
隧道网络 vpn