TCP IP Protocol suite(TCP/IP协议栈)
TCP IP Protocol suite 1
OSI 七层参考模型
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
TCP/IP Model(套件、协议栈)
- 协议栈中有很多协议,其中最常见也最重要的是传输层的TCP、UDP、IP
Mailing System(邮件系统)
数据就像邮件系统的邮票一样,有寄件地址和收件地址,由大的区域慢慢缩小范围,最终将包裹精准的送到收件人手里。
就像网络一样,IP就相当于是大范围,包裹相当于数据,快递员相当于路由器,将一个包裹从这边送到那一边。
Procol Suite
传输层有两个协议
- TCP可靠传输协议
- UDP不可靠传输协议
这两种协议都是由程序员根据应用而选择传输方式;接下俩会选择地址发送(IP);产生地址后就需要看地图,路由器会产生地图(路由表);从哪里来去哪里,做决定的是二层协议Mac地址.
Data Encapsulation(数据封装)
数据封装过程
- 首先应用层产生数据,数据就就相当于包裹
- 选择可靠或不可靠的协议,也就是选择可靠的快递公司
数据封装到这里是数据段(Segment)
- 把数据发送给那个地址,相当于快递的地址栏,里面写着寄件地址和收件地址。
数据封装到这里是数据包(Packet)
- 有了IP地址后决定目的地走那条路
数据到了这里是数据帧(Frame)
- 最后数据将转化为二进制进行传输,相当于快递中送包裹选择什么方式
数据到这这里是比特流(bits)
TCP IP Protocol suite 2
Telnet
一前的一种远程登陆协议,现在基本上不用了,因为Telnet远程登陆是明文传输,没有加密不安全,很容易被黑客盗取数据。
SSH
后来远程登陆升级了,这种协议抓包无法可看到密码。
FTP (File transfer Protocol)与 TFTP
这两种文件传输协议的区别。
- FTP可以走dir命令,并且可以查看文件目录,并可以做出修改
- TFTP不能看目录,必须知道文件名。
DNS Domain Namespace (DNS域名解析)
域名的分类
- 域名由根域名 (Root Domain)
- 顶级或一级域名(TOP-Level Domanin)
- 二级域名 (Second-Lever Domain)
世界上总共有13根服务器,12个独立机构管理
域名的作用:
- 解析主机名
- 记录域名与IP之间的关系 域名解析IP
例:45.113.192.102-----www.baidu.com
- IP解析回域名
DNS工作方式
- 访问网站时电脑并不知道百度服务器在哪里
- 电脑该如何通过域名找到服务器的IP?
- 通过域名解析,解析域名然后反馈IP地址
- 其实浏览器是通过解析后的IP地址访问服务器(并不是域名)
DNS Recursive VS Iterative Query(DNS 递归与迭代查询)
递归
- 先询问DNS,DNS在本地(配置在电脑上)
- 电脑会把DNS的询问发送给这个服务器
- 本地查询不到,会像上级反映(根服务器),根服务器这边会知道这些顶级域名是什么
- 根域名会帮自己去问这个域名对应的IP地址是多少,顶级域名会一步一步返回给自己。
迭代
- 先询问DNS,如果本地DNS不知道,则会让你去访问其他DNS服务器或根服务器,会告诉你访问哪个网站。
递归和迭代一起使用
用户访问一个网站请求DNS,如果不知道,会直接访问DNS服务器,DNS服务器会访问向根域名或者顶级域名并返回对应的域名解析IP
在此期间开始使用了递归方式,请求了这个DNS也返回了DNS解析后的IP,现在DNS服务器做的是一个迭代工作,因为DNS服务器向每一个顶级域名或根域名请求。原本解析工作像长蛇一样,一次域名解析需要多次访问,但现在你只需要访问NDS服务器,DNS服务器会迭代帮你访问,最后将解析后的IP告诉你。
Boot / DHCP / APIPA
1. 客户端先DHCP请求IP地址的过程
- 主机首先会说我没有地址,再然后发送广播请求IP地址 Discover(发现)
- DHCP服务器会说给你这个地址怎么样单播 ** Offer(给予)**
- 如果客户端确认使用这个IP地址,则客户端会发送广播请求这个地址 Request(请求)
- DHCP服务器收到后会以单播发送确认 ACK(确认)
- 现在客户端就已经成功获取地址了
2. DHCP的4种报文
- DHCP Discover 发现 广播
- DHCP Offer 给予 单播
- DHCP Request 请求 广播
- DHCP ACK 确认 单播
3. 微软API
当用两台设备的DHCP服务器不可用时,会自动配置地址 会随机产生两个169.154.0.1-169.254.255.254,使用这个地址池的地址作为紧急通讯
TCP IP Protocol suite 3
Layered System Review(系统分层审查)
TCP与UDP的端口号不是通用的
- TCP端口起始:0~65535
- UDP端口起始:0~65535
TCP/UDP Port Number(端口号分类)
- 0~1024 well-Known(知名端口号)
- 1024~49151 registered Port(注册端口号)
- 49152~65535 dynamic or Private(私有端口号)
自己电脑上使用的是私有端口号,一些著名的协议上使用的是著名端口号;例如:HTTP服务器就对应TCP端口号80,DNS服务器的UDP端口号是53,SMTP邮件使用的是TCP的25端口
NIC, Ethernet Type, Protocol Number(网卡/以太网类型、协议号)
TCP/IP分为四层,分别是数据链路层、网络层、传输层、应用层
-
首先应用层产生数据,知名端口号对应着应用,如果是是一个FTP应用那么他一定对应着知名TCP端口号21,有时候我们看到TCP的21的端口号就知道他是一个FTP
-
在传输层里如果协议号是6那么他就是TCP协议,如果协议号是17那么他就是UDP协议
-
在网络层里协议号OSPF对应协议号89 EIGRP对应协议号88,我们从网络层里发现协议号就可以判断这是一个什么IP协议
-
在数据链路层里包含着以太网类型是什么:0x0800是IPV4 0x86DD是IPV6 ,在数据链路层里我们可以通过0x800判断这是一个IPv4
-
通过以太网类型我们可以知道对应的物理介质是什么,0x86DD IPV6对应着物理介质光纤
不同层之间通过Next Heander(数据头部)来判断下一步应该将数据发给哪一个协议或者应用
Host to Host Communication
模拟左边的主机要给右边的主机发送数据,假设这是FTP的客户端,右边是一个Server
- 首先会产生数据,然后往下传递
- 因为是FTP协议,这是一个知名端口号,因为FTP对应着TCP协议21,所以会在数据包前面加上一个21
- 21所对应的是TCP协议,如果向下传递也就是往第三层传输的时候,就会在IP Header里面加上6,代表我是从TCP协议来的
- 数据包到达网络层,这时候就会下我的源地址和目标地址,会通过路由协议查看地图,看看自己是否能够到达Server这里,如果有就会向下传递,ARP这里会做一个转换 也就是将IP address 对应 MAC Address
- 数据到达二层就会在前面加一个MAC address 如果是IPV4下来的就会在Ethernet Type中写上0X800,因为二层使用的是Ethernet Type 所以发送给一层的时候就会选择一个网卡,网卡是专门给以太网传输用的.
- 然后就会变成10010101二进制的bit传输
二进制数据到达了路由器
-
二进制数据到达路由器1层,就会向上传递到2层以太网协议,以太网会向上传递到3层IP协议,会根据路由协议产生的地图 和 三层数据包IP地址的目的的地址进行一个查看,检查一下目的地是否可达,如果可达会把数据包一直向下转发,通过右边接口转发出去。
-
接下来数据包就会来到右边的主机,右边系统看到你是从以太网网卡,所以会把数据包发给2层的以太网协议。
-
2层以太网协议看到数据包报头是0x800就会把数据包转发给IPV4
-
IPV4会看IP Header中的Protocol Number是几,如果是6就代表这个数据是给TCP的,然后就会发送给传输层
-
传输层收到数据后,就会产看TCP Header 中的Protocol Number ,如果是21就代表这个数据包要发给FTP这个程序处理。
-
数据包最终完成转发
总结:数据在传输的时候总会查看Header来确定下一个协议 一环紧挨着一环不出错。协议号对应着协议号和端口号。
TCP/IP Protocol Suite 4
TCP vs UDP
- TCP 可靠传输协议
- UDP 不可靠传输协议
TCP 3-Way Handshake(TCP三次握手)
1.三次握手
三次握手就是发送方发送数据给接收方收到信息后并做出确认收到,发送方收到确认信息后,再次回复确认
1.发送方发送数据
2.接收方收到信息后确认并回复:我收到信息了
3.发送方看到确认信息并回复确认
2.Buffer(缓存区)
其中Buffer(缓存区):接收到一个数据包时,会暂时存放数据包的一个地方。
3.为什么TCP传输协议可靠?
因为三次握手其中一方发生问题,都不能进行数据传输。
TCP Flow Control(TCP控制流)
缓存区已满(流量控制机制)
1.当数据传输太快,缓存区已满时(Buffer overflow)
- 发送方(Seeder)发送(Seed)数据,接收方(receiver)接收(receiving )数据,收到的数据承载不了。
- 这时接收方(receiver)发送(Seed)停止信息
- 发送方(Seeder)停止发送信息后,会把剩下的数据处理完成,有时间处理新数据时
- 发送方(Seeder)就会告诉对方,可以继续发送(seed)了,可以避免缓存已满(Buffer overflow)的情况。
Sequencing & Acknowledgment(序号和响应)
- 数据传输时是分成很多小块,例如1G的文件会分成10个100M,一次会传输100M
- 那么接收方接收到零散的数据会怎么重新组装起来
(因为可能会发生先发送的数据后到,后发送的数据先到;先发送的数据包比较大一直在传输,而后面的数据包小会先传输出去)
- 不能保证传输的数据会按顺序到达,Sequencing机制会给每一个数据安排一个号码,现在即使后面的数据包小的先传输到达,但是也能够按照序号顺序重新组装
TCP Window Control(新的窗口控制机制)
- 一次能发送多少个数据包
- 收到一个数据包响应一次
TCP Retransmission(重传机制)
如果出现发送的数据包丢失
- 发送方发送6个数据包
- 接收方接收数据时,发现序号5的这个数据包没有传过来 也就不能对数据进行还原,就会给发送发发送同一个序号
- 发送方收到序号5,就会做出响应,将序号5重传
TCP Segment Format(TCP格式)
TCP格式
- 16-bit-source Port (源端口) 16-bit-destination Port(目的端口号)
- 32-bit-sequence Number (序列号)
- 32-bit-Acknowledgment Nmuber (确认号)
- 16-bit-window size (窗口大小)
TCP头部有20个字节,但可以增加到24个字节,得益于Options
UDP Segment Format(UDP格式)
UDP格式
UDP相对于TCP来说格式比较简单
- 源端口 and 目的端口号
- 长度
- 校验和
什么时候使用TCP,什么时候使用UDP
这个属于应用层面,一般由程序员决定具体使用那个协议
以前线材质量不好,会导致数据传输的时候丢包,现在线材质量好了,使用UDP传输时不会使数据丢包,所以现在很多的程序会采用UDP传输,因为速度快。
Network Layer Protocols
- Routing and providing a single network interface to the upper layers路由为上层提供单个网络接口
- Internet Protocol IP互联网协议
- Internet Control Message Protocol ICMP(互联网控制消息协议)
- Address Resolution Protocol ARP(地址解析协议)