美文网首页
TCP/IP学习

TCP/IP学习

作者: 抬头挺胸才算活着 | 来源:发表于2020-04-02 20:23 被阅读0次

参考资料:
思维导图

ARP:是一种解决地址映射关系问题的协议,以IP地址为线索,定位下一个应该接收数据帧的网络设备,所对应的MAC地址。
步骤:

  1. A机器首先发送一个广播包,包含自己的IP地址和MAC地址,还有要知道MAC地址的IP地址
  2. 对应的MAC地址机器B回复一个包,并且保存A机器的IP地址和MAC地址。
  3. A收到回复之后更新B机器的IP地址和MAC地址。

IP:主机到主机,IP到IP的通信。只要解决如何抵达目的地,网络层的路由技术,主要实现路径的选择和优化。只能尽量发送数据包,并不能保证一定送达和发送接收的顺序。IP是无连接的。
数据链路层在互连同一种数据链路的节点之间进行包传递,网络可以跨越多种数据链路层。

IP头部:
版本+头部长度+TOS(type of service 服务质量要求)+总长度(最大65535)+标识(用于分片重组,不同分片的标示值不同,递增)+标志(是否进行分片)+片偏移+生存时间(TTL,每经过一个路由器减1,减到0丢弃)+协议(下一个首部属于哪个协议)+首部校验和+源地址(IP地址,32位)+目标地址

IP分片:
当IP包大于链路层的MTU的时候,IP会进行分片

IP协议理论上允许的最大IP数据报为65535字节(16位来表示包总长)。但是因为协议栈网络层下面的数据链路层一般允许的帧长远远小于这个值,例如以太网的MTU(即Maximum Transmission Unit,最大传输单元)通常在1500字节左右。所以较大的IP数据包会被分片传递给数据链路层发送,分片的IP数据报可能会以不同的路径传输到接收主机,接收主机通过一系列的重组,将其还原为一个完整的IP数据报,再提交给上层协议处理。上图中的红色字段便是被设计用来处理IP数据包分片和重组的。

ICMP:ICMP是IP的附属协议
主要功能是确认IP包是否成功送达目标地址,通知在发送过程当中IP包被废弃的具体原因,可以诊断网络,改善网络。ICMP具体是由IP头部+ICMP头部+数据组成。

  1. 在路由器缓存满了的时候,会丢弃数据包,这个时候路由器会用ICMP给源目标发送消息。
  2. 目标IP不可达,路由器也会发送回来。

ICMP头:
8个字节,4个可选。
不同类型由报文中的类型字段+代码字段共同决定。
ICMP差错报文结构:IP头部+ICMP头部+(差错的IP头部+差错的IP数据前8个字节),差错的IP数据前8个字节这部分对于不管是TCP还是UDP,包含了源目端口号,我们也就可以查出对应的应用

Path MTU的计算:
为了防止网络包在传输带的时候进行分片,我们需要得知网路上所有设备的最小MTU。我们可以在UDP的头里面设置不可分片,然后会返回一个ICMP的信息,其中含有最后一个因为MTU不通设备的MTU,我们继续上述过程直到发送数据包到目的地成功。

UDP:简单的面向数据报(TCP是面向数据流)的传输层协议。
数据报,我理解就是一个个单独的个体,发送和接收的时候都是一个个的数据报,不会混在一起,而TCP是一个数据流,发送和接收的包之间不会有间隔。这时我想到了为什么TCP有时会粘包,就是TCP是把多个包粘接起来,当成一个流发送出去。

UDP头部:源端口(2个字节),目的端口,长度(头部+数据),校验和

广播与组播:
三种IP地址:单播,组播,广播。
广播和组播仅应用于UDP,它们对需将报文同时传往多个接受者的应用来说十分重要。
TCP是面向连接的,只能在两个进程(两个端口号)之间进行通讯。
组播(多播):组播处于单播和广播之间,帧仅传给属于多播组的的多个主机。组播需要有限制的一类IP地址,即D类IP地址,即224.0.0.0至239.255.255.255之间的IP地址,参与组播的机器要提前分配为这类IP地址。
广播:在IP网络中,广播地址用IP地址“255.255.255.255”来表示,这个IP地址代表同一子网内所有的IP地址。

DNS:
IP地址不容易记住,需要有域名跟IP的映射。
基于UDP。
DNS是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换,及有关电子邮件的选路信息。分布式指的是没有一个DNS服务器拥有全部的信息。DNS是一个程序,TCP/IP对于DNS未知。
DNS解析的时候是树状的,比如www.baidu.com,先从com开始,服务器告诉你baidu.com在哪,然后baidu.com服务器告诉你www在哪,然后你到达www.baidu.com。DNS做的是迭代查询,所以需要多次连接不同的DNS服务器。

TFTP:基于UDP,但是自己用停止等待来控制数据的完整性,也就是发一个包,等待回复一下。

DHCP:动态获取IP地址

TCP首部
源端口号+目标端口号(端口号都是2个字节16位)+序列号+确认应答号(因为是全双工,所以有两个序列号)+数据偏移(也就是头部长度,4个位,最大15*4=60个字节)+保留位+控制位(FIN(FIN是说发起方不发数据了,但是发起方还是可以接收的)+SYN(用于建立连接)+ACK+RST(出现异常,必须断开连接:一个没有被使用的端口或者这边要宕机或者切断电源)+其他)+窗口大小(16位,65535个字节,对于高速网络现在来说可能太小了,所以后面选项里面可以使得窗口大小拓展到1G)+校验和+紧急指针+选项(根据数据偏移字段控制这个最多为40个字节)

RST:出现的情况,我这边突然断电,对方还保留着TCP连接,我重启了,我什么都不知道了,对方发送数据过来,我发现没有这个TCP连接,我回复RST,同时ACK为0,回复序列号为0。

窗口大小与吞吐量
窗口65535,RTT(往返时间)0.1s,因为发送最大窗口出去后,窗口在接收到ACK的之前已经变为0,所以变成了停止等待了,吞吐量=65525/0.1s=5.2Mbps,多连接是提高吞吐量的措施之一,比如百度网盘和迅雷这些软件,选项中增加窗口因子也可以增加吞吐量。

套接字(Socket)
Socket一开始是用在Unix进程间通讯的,所以有些配置才会感觉怪怪的,比如IPv4的类型为AF_INET,还有一个而对应的是进程间通讯类型为AF_UNIX。SOCK_STREAM是TCP,因为TCP是面向数据流的,SOCK_DGRAM是UDP,因为UDP是面向数据报的,SOCK_RAW是ICMP,IGMP等协议的。
服务器:创建Socket对象, bind方法绑定本地端口号,listen方法进行监听,accept连接成功,返回一个connection,之后用connection进行数据交换,返回连接的IP和端口号,recv(n),从TCP缓存区中读取n个字节。
客户端:创建Socket对象,connect方法连接目标IP和端口。
使用UDP的时候如果数据报超过n(recvfrom(n)),会进行截断,TCP面向流的,不会进行截断。

HTTP请求:




HTTP是无状态的,但用隐含参数和Cookie技术可以解决这个问题。
隐含参数可以看下视频的例子,可以更好地理解HTTP是无状态的。

HTTP特性:

  • 客户服务模型
  • 无状态
    Cookie技术解决无状态。
    Cookie可以理解为,用键值对保存用户状态,Cookie是服务器生成发送给客户端的,下次客户端发送请求的时候顺便发送Cookie
  • 哑服务(只有请求才有响应)
  • 瞬时协议与持久连接
    HTTP1.0的做法:TCP三次握手,请求,回复,TCP四次挥手
    多次请求需要建立多次TCP连接,比较耗费资源,所以HTTP1.1提出了持久连接,可以处理多个请求,没有任意一端说断开,那就一直连着。

HTTP报文:头+空行+报文主体(非必须)




状态码


以太网MTU是怎么计算的?

最大的帧是 1518 字节,除去 14 字节头部和 4 字节 CRC,有效荷载最大为 1500,这个值就是以太网的 MTU。

ISN

一个建议的算法是设计一个假的时钟,每 4 微妙对 ISN 加一,溢出 2^32 以后回到 0,这个算法使得猜测 ISN 变得非常困难。
不能,

  1. 主要是为了防止黑客发送伪造RST包,RST需要sequence number 、acknowledged number,只要这两个是位于接收窗口的范围内就是合法的。
  2. 因为开启 SO_REUSEADDR 以后端口允许重用,收到一个包以后不知道新连接的还是旧连接的包因为网络的原因姗姗来迟,造成数据的混淆。如果采用动态增长的 ISN,那么可以保证两个连接的 ISN 不会相同,不会串包。

相关文章

  • 2019-10-09

    今天学习了TCP/IP

  • 【tcp】《TCP/IP网络编程》学习笔记

    《TCP/IP网络编程》学习笔记 https://github.com/riba2534/TCP-IP-Netwo...

  • C1 了解Web及网络基础

    KeyWords: 诞生,网络基础TCP/IP,TCP/IP协议族,TCP/IP的分层管理,TCP/IP通信传输流...

  • TCP协议

    TCP/IP协议分层详解TCP/IP协议详解通俗易懂网络协议(TCP/IP概述)什么是TCP/IP协议?

  • TCP/IP学习

  • TCP/IP学习

    tcpdump 抓取TCP信息tcpdump port 10191:port可以筛选指定端口的信息tcpdump ...

  • TCP/IP 学习

    分层: 网络协议通常分为不同层次进行开发,每一层分别负责不同的通信功能,比如TCP/IP 链路层(数据链路层或网络...

  • TCP/IP学习

    参考资料:思维导图 ARP:是一种解决地址映射关系问题的协议,以IP地址为线索,定位下一个应该接收数据帧的网络设备...

  • TCP/IP学习

    网络7层模型和TCP/IP四层模型 HTTP和TCP/IP有什么不一样?http是应用层的协议,tcp为传输层的协...

  • TCP HTTPS专题

    TCP HTTPS专题 TCP协议 TCP/IP协议分层 TCP/IP 协议族里重要的一点就是分层。 TCP/IP...

网友评论

      本文标题:TCP/IP学习

      本文链接:https://www.haomeiwen.com/subject/ighoyhtx.html