《TCP/IP图解》读书笔记
看这本书的目的:
- 了解计算机之间是怎么通信的
- 熟悉TCP/IP协议
后面就这两个目的进行展开,要达到这两个目的,读这本书,学到了哪些知识。
一、计算机之间是怎么通信的
先来了解下面几个概念,中继器,二层交换机,路由器,IP地址,Mac地址
1. IP地址和Mac地址
IP地址和Mac地址大家都非常熟悉了,到底在计算机的通信中,起到什么作用呢?
Mac地址是用来真正负责最终通信的地址。
IP地址用来寻址的。
下面想一个场景: 小明从上海到北京,假设没有火车直达。
- 第一步: 小明知道自己的出发地是上海,目的地是北京。那IP路由转换表就相当于行程表,告诉小明,首先应该从上海到南京。拿到南京这个IP,小明来到了火车站,问售票员(arp)到南京怎么走,售票员给了小明一张到南京的火车票(mac地址),这样小明顺利的到达了南京。
- 第二步: 到达南京后,行程表告诉小明,下一站到北京去,小明又来到了火车站,问售票员(arp),到北京怎么走,售票员给小明一张到北京的火车票(mac地址),这样小明就顺利的到达了北京。
如果行程表(IP路由转发器),火车票(mac),两者少了一样,小明都到达不了北京。
问题:
为什么使用IP地址进行路由?
由于IP地址具有层次性,就像一棵树,寻址更快。而mac地址不具有这样的特性。
2. 中继器
在计算机诞生之前,中继器就已经诞生了。在电报机年代,尽管一些电报线使用高达300伏的电压能在300英里的范围内工作,长距离导线电阻的原因,导线还是不能无限延伸。这个时候,中继器诞生了。就是使用转发(中继)系统,也称为继电器系统,大约每200英里就让发报者通过中继器加强信号,再发出去。
原理(如下图):
输入电流激发电磁跌,电磁跌吸引一根有弹性的金属条作为开关,从而输出电流。
3. 二层交换机(网桥)
首先附上大神们在知乎上的回答
https://www.zhihu.com/question/50104637/answer/119837346
首先网桥是二层网络设备,是现代交换机的前身。一定程度上降低了冲突域的发生,另外提供简单的存储转发功能,如果产生冲突直接拒绝,没有现代交换机的缓存队列。
-冲突域:你说话的时候,别人不能说话,别人说话的时候你不能说话,同意时刻只能有一个人说话
-广播域:你喊了一嗓子,所有人都能听到。别人喊一嗓子,所有人也能听到。4. 网关 VS 路由器
4.网关
网关是一个概念,不具体指一类产品,只要连接两个不同网络的设备都可以叫做网关;而路由器需要将局域网的以太帧格式转换为串行通信的HDLC帧格式,使不同协议类型的接口能够通信,这是路由器的最早功能,现在还具有具有路由寻址和转发功能,所以路由器可以看做网关的一种实现,但不局限于网关的基本功能。
默认网关:
通常说的默认网关是默认的数据出口,当数据的目的IP没有响应的路由匹配规则,都走到默认网关,由默认网关进行路由转发。
5.相关协议
6.计算机之间的通信
二、TCP/IP协议
TCP/IP协议并不是单纯指TCP、IP协议,是指TCP/IP协议族,其中包括很多协议,比如tcp/udp、ip、arp、icmp等等
1.TCP协议
是面向连接的,可靠的、基于字节流传输层通信协议。有超时重传机制、阻塞控制机制等等保证通信的质量。更详细信息参考百科全书(https://zh.wikipedia.org/wiki/%E4%BC%A0%E8%BE%93%E6%8E%A7%E5%88%B6%E5%8D%8F%E8%AE%AE)
三次握手连接:
数据传输:
四次回收断开:
2.UDP
用户报文协议,与TCP相对,也是传输层协议。但不是面向连接的,不可靠,传输的速度比TCP快。
3.MTU MSS 滑动窗口
更详细参考车神的回答
3.1 MTU
MTU, 是 Maximum Transmission Unit 的缩写,最大传输单元,即物理接口(数据链路层)提供给其上层(通常是IP层)最大一次传输的数据的大小。
3.2 MSS
MSS,是Maximum Segement Size,TCP提交给IP层最大分段的大小,不包含TCP Header和TCP Option,只包含了TCP Payload,MSS是TCP用来限制application层最大的发送字节数。
MTU和MSS是就是为了避免在传输过程ip层分包。MTU是由最小MTU路径发现得到,然后根据MTU算出MSS即可,一般是MTU是1500,去掉IP和TCP Header各20字节,一般是1460字节。
3.3 滑动窗口
由于最传统的TCP IP通信,每次传输必须等ACK,否则发送端就一直阻塞在这里,不往下发送,通信的效率极低。滑动窗口设置一个传输范围,批量的发送,没必要等每次传输的ACK,极大的提高了传输效率。
3.4 端口
详见 http://www.cnblogs.com/beginmind/p/6517913.html
《TCP/IP图解》读书笔记的更多相关文章
- csapp读书笔记-并发编程
这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...
- CSAPP 读书笔记 - 2.31练习题
根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1) 属于第一种情况 sum = x ...
- CSAPP读书笔记--第八章 异常控制流
第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...
- CSAPP 并发编程读书笔记
CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
随机推荐
- javascript模拟post提交
通过js模拟post提交1:请求需要的参数过长,超过get允许的最大长度2:想要隐藏地址栏的参数 //新创建一个form表单document.write('<form name=myForm&g ...
- 前端如何接收 websocket 发送过来的实时数据
WebSocket protocol 是HTML5一种新的协议,它实现了浏览器与服务器全双工通信(full-duple).刚开始的握手需要借助HTTP请求完成,在 WebSocket API,浏览器和 ...
- (C++)浅谈using namespace std
1.<iostream>和<iostream.h> 在你的编译器include文件夹里面可以看到,二者是两个文件,里面的代码是不一样的. 后缀为.h的头文件c++标准已经明确提 ...
- centos版本7以上网卡名修改
1.初始状态网卡 2.首先,先编辑网卡的配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 将里面的NAME项修改为eth0 3.然后,禁 ...
- linux安装卸载软件
转自:http://www.cnblogs.com/propheteia/archive/2012/06/26/2563383.html configure作用:是源码安装软件时配置环境用的 他根据你 ...
- HTTP浏览器缓存机制
来自:http://kb.cnblogs.com/page/165307/ 浏览器缓存机制 浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如: Expires: Cache-control等 ...
- vue 父子组件传值的另外一种方式 provide inject
1.文档说明 https://cn.vuejs.org/v2/api/#provide-inject 2.实例 element ui的dropdown组件 dropdown.vue: provide( ...
- 〖C语言〗C语言一个函数传递无限制多参数(不确定参数函数)的方法
/* * ===================================================================================== * * Filen ...
- Yii1.1应用升级到Yii2.0的一些注意点
1. 应用程序实例直接使用全局命名变量来訪问:$app,而无须调用app() 2. Yii2在视图层的一个显著改变是引入了视图类,这样在MVC模式实现上更为完整. 对应的,相关展现层附属类就由新的视图 ...
- (数据库)DBCP连接池配置参数说明
<!-- 数据源1 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicData ...