tcp/ip 卷一 读书笔记(1)tcp/ip 概述
TCP/IP协议概述
术语
广域网 WAN
局域网 LAN
TCP/IP四层网络模型
TCP/IP通常被认为是一个四层协议系统
- 网络接口层 包括arp,rarp协议,包括操作系统中的网卡驱动程序和对应的网络接口卡,一起处理数据在电缆之间传输的细节,这一层是同一个链路网络内,不同接口之间通过mac地址通信。arp协议是根据ip地址,请求对应的mac地址,rarp协议是根据mac地址,请求ip地址(可以用来做开机获取ip地址,实际现在已经不这么做了),二层的典型设备是交换机,交换机内有一张mac地址和对应的端口规则的表,每当收到一个包,如果是arp广播包,那么就将这个包从这个交换机的所有接口(这里不考虑vlan先),如果不是广播包,交换机根据目的mac地址来匹配应该将数据转发往哪个端口,然后从对应的端口扔出去。网桥是低端版的交换机,也有类似的功能,可以在链路层上对网络进行互联,linux bridge就是虚拟的网桥。交换机和网桥隔离冲突域。
- 网络层 包括IP,ICMP,IGMP协议,ip地址和路由设备,都是网络层的概念,链路层的通信,只能在一个或者多个交换机连接的网络内,其实算是同一个网络,里面的机器mac地址不能冲突,一个arp包,所有的机器都能收到,所以我们即使不考虑代价的问题,我们也不会把全世界所有的机器都直接接到,一个这样的网络内(wan),我们需要会把自己的网络,链路层上同外界的网络隔离,通过路由设备和他们通信,这样好处多多,后面再分析。路由设备是网络层的设备,它存储ip地址和对应的接口的对应关系,通过路由选择协议,根据目的ip地址选择下一跳的ip地址(也会是个路由设备或者虚拟路由设备或者目的地址),通过arp协议获取到下一跳的mac地址,修改数据包,将目的mac地址设置成这个地址,扔给链路层,由链路层送出。路由器隔离广播域。(笔记五中更详细的介绍了通信过程,以及为什么路由器隔离广播域)
- 传输层 包括tcp协议,udp协议。网络层的传输主要是一个ip+端口号,将数据发送给另一个ip+端口号,这个端口号,是用来区分不同的应用程序,告诉操作系统,这个包是发给那个程序的,该扔到哪个缓存里面,由哪个程序负责读出。udp是不可靠的传输,不理会传输的过程中是否发生丢包,通常主机内的通讯都使用udp,主机间的通信,如果使用udp,需要自己做好传输可靠性的检验。tcp的设计思想是尽可能可靠的传输,保证数据已定能传输到,尽量避免拥堵,所以tcp设计不是为了占据更多的带宽而设计的,多个链接可以提高传输速度,tcp的设计在网络速度越来越快的情况下,暴漏出很多缺陷,后面再谈。
- 应用层,各种应用工作的层次
还可以看OSI七层网络模型
互联网的地址
网络地址分类,IPV4的情况,IP地址分为A,B,C,D,E五类,各自所处的范围如下:
| 类别 | 格式 | 最大网络数 | IP地址范围 | 私有地址范围 |
|---|---|---|---|---|
| A | 0[7b netNum][24b hostNumber] | 126(2^7-2) | 0.0.0.0-127.255.255.255 | 10.0.0.0-10.255.255.255 |
| B | 10[14b netNum][16b hostNumber] | 16382(2^14-2) | 128.0.0.0--191.255.255.255 | 172.16.0.0-172.31.255.255 |
| C | 110[22b netNum][8b hostNumber] | 2097150(2^21-2) | 192.0.0.0-223.255.255.255 | 192.168.0.0-192.168.255.255 |
| D | 1110[28b multcast number] | N/A | 224.0.0.0-239.255.255.255 | N/A |
| E | 11110[27b reserved number] | N/A | 240.0.0.0-255.255.255.255 | N/A |
最大网络数-2是因为全0和全1的网络号(netnum)是非法的。
D类地址是多播地址,E类是预留地址。
私有地址是非Internet网络使用的地址,公网上的路由器不会转发目的地址是私有地址的数据
无类别域间路由
A,B,C等分类地址的划分是最初的设计,后来人们遇到这样的问题
In the early 1990s, after the adoption of subnet addressing to ease one form of growing pains, the Internet started facing a serious set of scaling problems. Three particular issues were considered so important as to require immediate attention:
- By 1994, over half of all class B addresses had already been allocated. It was expected that the class B address space would be exhausted by about 1995.
- The 32-bit IPv4 address was thought to be inadequate to handle the size of the Internet anticipated by the early 2000s.
- The number of entries in the global routing table (one per network number), about 65,000 in 1995, was growing. As more and more class A, B, and C routing entries appeared, routing performance would suffer.
为了解决这些问题,现在我们引入了无类别域间路由的概念,使用cidr的方式,用网络地址加上掩码来表示一个网络,如
172.16.40.128/25,10.0.0.25/32. cidr的本质在于,使用掩码分割网络,表示网络的范围,而不是根据网络类型。cidr的好处在于,提高网络地址的利用率,分配一个网络,可以只分配,2个,4个,8个,16个...地址,而不是256,255256,256256*256。
cidr技术减缓了ipv4地址耗尽的趋势,类似的还有nat技术,nat技术工作在路由设备上,传输层,可以让很多用户共用一个公网ip地址,而不是所有人都接入到Internet中,也起到减缓ipv4地址消耗的作用。
关于cidr和nat,可以看:协议森林14 逆袭 (CIDR与NAT)
cidr同时还能够支持路由汇聚的功能,减少互联网上的路由表项的数目,以解决引用中提到的第三个问题,可以看 cidr_维基百科
各种数据报的格式
tcp的数据包:
| link header | ip Header | tcp Header | data | link trailer |
|---|---|---|---|---|
| 14bit | 20bit | 20bit | 不固定 | 4bit |
udp的数据包:
| link header | ip Header | tcp Header | data | link trailer |
|---|---|---|---|---|
| 14bit | 20bit | 8bit | 不固定 | 4bit |
icmp和igmp数据包,主要在ip header中的协议值区分:
| link header | ip Header | data | link trailer |
|---|---|---|---|
| 14bit | 20bit | 不固定 | 4bit |
arp和rarp数据包,主要在以太网首部中的的帧类型区分:
| link header | data | link trailer |
|---|---|---|
| 14bit | 不固定 | 4bit |
各种去掉link header和link trailer之外的数据,最大有一个长度,超过这个长度的数据交给链路层,链路层会不处理这个数据,会直接丢弃。
这个最大长度我们称为mtu,ip层交给link层的数据长度一定要小于等于MTU值。
在tcp中,还有mss值得概念,指上图tcp数据包中的data的大小,后面再谈。
参考:
TCP/IP详解 卷一
TCP/IP详解 卷二
等
tcp/ip 卷一 读书笔记(1)tcp/ip 概述的更多相关文章
- tcp/ip 卷一 读书笔记(5)arp和rarp 同网段和不同网段之间的通信过程
arp和rarp 同网段和不同网段之间的通信过程 IPv6中已经没有arp rarp协议,所以这里都是IPv4. 链路层使用以太网地址来确定目的地址,应用则常使用ip地址通信 arp协议是指从ip地址 ...
- tcp/ip 卷一 读书笔记(2)物理层和链路层网络
物理层和链路层网络 术语 链路 是一对相邻结点间的物理线路,中间没有任何其他的交换结点. 数据链路 除了物理线路外,还必须有通信协议来控制这些数据的传输. 帧 数据链路层的协议数据单元(PDU) 串行 ...
- tcp/ip 卷一 读书笔记(3)为什么既要有IP地址又要有MAC地址
网络层 首先明确一点,并不是所有的网络之间传输数据都需要mac地址和ip地址,比如说点对点线路之间的通信就没有MAC地址,网络层使用ipx协议时就没有ip地址,但是在当前的主流网络中,我们都使用ip地 ...
- 《图解tcp/ip》读书笔记(二)
<图解tcp/ip>读书笔记(二) 本周主要阅读的是本书的第三章--数据链路. 当然了,从某些角度讲,我认为这一章就是计算机网络的最基本的内容之一.整章讲述了数据链路层的作用和相关技术,主 ...
- 《图解tcp/ip》读书笔记(一)
我先讲三句话: 一."万物互联的时代到了."我们生活在这样一个互联网急速发展的时代,也许很快就会发现,你能接触到的一切都可以连接到互联网了,电脑.手机这 ...
- 《图解TCP/IP》读书笔记
一.国际惯例:书托 这是一本图文并茂的网络管理技术书籍,旨在让广大读者理解TCP/IP的基本知识.掌握TCP/IP的基本技能. 书中讲解了网络基础知识.TCP/IP基础知识.数据链路.IP协议.IP协 ...
- 《图解TCP/IP》读书笔记(转)
reference: https://www.cnblogs.com/edisonchou/p/5987827.html 一.国际惯例:书托 这是一本图文并茂的网络管理技术书籍,旨在让广大读者理解TC ...
- C#基础知识之图解TCP IP》读书笔记
一.网络基础知识 1. 计算机使用模式的演变 2.协议 协议就是计算机与计算机之间通过网络实现通信事先达成的一种“约定”.这种“约定”使那些由不同厂商的设备.不同的CPU以及不同的操作系统组成的计算机 ...
- TCP/IP详解 读书笔记:TCP:传输控制协议
TCP的服务 TCP为应用层提供一种面向连接的.可靠的字节流服务. 一个TCP连接中,仅有两方进行彼此通信,所以广播和多播不能用于TCP. TCP通过以下方式提供可靠性: 应用数据被切割为TCP认为最 ...
随机推荐
- Makefile 的使用
第一篇: OBJS = ./persion.o all : persion @echo "version 03" persion : $(OBJS) g++ -o $@ $^ ./ ...
- javascript 中的console.log有什么作用啊?
相比alert他的优点是: 他能看到结构话的东西,如果是alert,淡出一个对象就是[object object],但是console能看到对象的内容. console不会打断你页面的操作,如果用al ...
- 13 Basic Cat Command Examples in Linux(转) Linux中cat命令的13中基本用法
Cat (串联) 命令是Linux/Unix开源系统中比较常用的一个命令.我们可以通过Cat命令创建一个或多个文件,查看文件内容,串联文件并将内容输出到终端设备或新的文件当中,这篇文章我们将会以实例的 ...
- oracle pl/sql如何定义变量
目的:如何在pl/sql中定义基本类型,引用类型,记录型变量? 以下plsql程序用的scott用户的dept,emp表. 定义基本类型的变量 set serveroutput on ; --使用基本 ...
- java for循环增强(foreach)
for循环增强,在此之前还不知道foreach有这样的功能,先鄙视一下自己,留给自己看: 功能: ***若List用foreach : [ for(Student stu : list) ]这种形 ...
- R语言-探索多个变量
目的: 通过探索文件pseudo_facebook.tsv数据来学会多个变量的分析流程 通过探索diamonds数据集来探索多个变量 通过酸奶数据集探索多变量数据 知识点: 散点图 dplyr汇总数据 ...
- PowerMockito使用详解
一.PowerMock概述 现如今比较流行的Mock工具如jMock,EasyMock,Mockito等都有一个共同的缺点:不能mock静态.final.私有方法等.而PowerMock能够完美的弥补 ...
- python3中time模块的用法及说明
python中,导入time模块使用的命令是 import time 可以使用以下命令查看time模块内置的能够使用的方法: dir(time) 可以使用以下命令查看time模块中每个内置方法的说明: ...
- MySQL索引之B+树
MySQL索引大都存储在B+树中,除此还有R树和hash索引.B+树的基础还是B树. B树由2部分组成,节点和索引.下面将构建一个B树,每个节点存2个数据,每个节点有前,中,后三个索引.插入数字的顺序 ...
- HTML标签的命名/CSS标准化命名大全
在一个内容较多的HTML页面中,需要设计许多不同的框架,再为这些不同的框架及内容进行分类,给予相应的名称,从而使得网页结构更加清晰,也为工作提供了方便.许多新手朋友在设计一个HTML文件时,可能只会依 ...