TCP/IP
Nestler
这个作者很懒,什么都没留下…
展开
-
TCP传输中序号与确认序号的交互
本实验通过SSH远程登录服务器,然后使用Wireshark抓包分析。开头的三次握手已经省略。关于序号的交互过程,需要记住一点:TCP首部中的确认序号表示已成功收到字节,但还不包含确认序号所指的字节,希望下一次能收到确认序号所指的字节。当在远程登录软件上键入命令时,客户端便开始了数据的发送,TCP头如下:初始化序列号ISN = 1,这个序列号是客户端对发送数据的一个标原创 2014-05-10 15:41:25 · 6414 阅读 · 0 评论 -
【TCP/IP】IP路由选择
IP层在内存中有一个路由表,当有数据要发送或接收到的数据到达IP层时,都要在这个路由表中进行查找,具体查找过程如下:搜索路由表,寻找能与目的IP地址完全匹配的表目。如果找到,则发送。否则,执行下一步。搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则发送。否则,执行下一步。搜索路由表,寻找标为“默认”的表目。如果找到,则发送。否则,执行下一步。发送失败,则向应用层返回错误信息。原创 2014-05-25 15:40:07 · 2135 阅读 · 0 评论 -
拥塞避免算法
当网络中的某个节点发生了拥塞,源主机会得到两种分组丢失的指示:发生超时接收到重复的确认拥塞避免算法和慢启动算法相互独立,但发生拥塞时,需要依赖慢启动算法实现拥塞避免。在实际中这两个算法通常一起实现。下面详细分析拥塞避免算法的流程:连接建立后,拥塞窗口cwnd初始化为1个报文段,慢启动门限ssthresh初始化为65535字节。当发生拥塞时(超时或受到重复确认),ss原创 2014-06-15 14:39:22 · 1672 阅读 · 1 评论 -
ICMP:Internet控制报文协议
ICMP:Internet控制报文协议。是IP层的组成部分,传递差错报文或其它信息。ICMP报文被封装在IP数据报内部:具体格式如下所示:个字段含义如下:8位类型。表示该ICMP报文的含义,如目的不可达、超时、请求回显等。8为代码。进一步描述该ICMP报文。ICMP报文的类型由类型字段和代码字段共同决定。16位检验和。和I原创 2014-06-03 13:44:33 · 1491 阅读 · 0 评论 -
TCP/IP概述
TCP/IP通常被分为四层,如下图所示:通常,应用层的程序属于用户进程,关心程序的细节,而其余的三层则在内核中执行,关心通信的细节。应用层的程序不关心自己的主机是在以太网上还是其它类型的网络中,它只将数据向下传递,不同类型的物理网络通过路由器相互连接,这就使得不同网络的应用程序能够相互通信了。网络层提供的是不可靠的服务,TCP在网络层之上为它提供了可靠的运输层,包括超时原创 2014-07-06 13:30:49 · 1293 阅读 · 0 评论 -
慢启动与拥塞窗口
在局域网中,发送方一开始便向网络发送多个报文段,直至达到接收方通告的窗口大小为止。但是,如果收发双方不在同一个局域网中,那么发送方一直发送可能会出问题,因为中间路由器有可能发生拥塞,拥塞是指一个或者多个交换点的数据报超载而导致时延剧烈增加的现象。为了解决这个问题,TCP支持一种被称为“慢启动”的算法,该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。为了控制原创 2014-06-12 12:43:14 · 2522 阅读 · 0 评论 -
TCP滑动窗口
TCP的滑动窗口解决了端到端的流量控制问题,允许接受方对传输进行限制,直到它拥有足够的缓冲空间来容纳更多的数据。滑动窗口的大小由接收方确定,接收方在发送确认信号给发送方的同时告诉发送方自己的缓冲区大小(在TCP头部字段中),发送方根据此大小确定窗口大小,从而控制数据发送量。同时,滑动窗口协议允许发送方在停止并等待确认前可以连续发送多个分组,由于发送方不必每发一个分组就停下来等待确认,因此该协议可以原创 2014-06-11 19:46:57 · 1599 阅读 · 0 评论 -
ARP地址解析协议
ARP地址解析协议:为IP地址到对应的硬件地址之间提供动态映射。以下图为例说明地址解析协议的具体工作流程。结合图中的序号进行说明。客户端通过FTP协议连接服务器时,首先解析器会把主机名转换为IP地址。这个过程既可以使用DNS服务,又可以使用本机上的hosts文件进行转换,hosts文件通常用于补充或取代网络中DNS的功能。根据目的IP请求建立TC原创 2014-05-26 13:39:09 · 1432 阅读 · 0 评论 -
IP数据报首部格式
IP协议提供不可靠、无连接的数据报传送服务。不可靠:尽力而为地传输,不保证IP数据报能成功到达目的地。无连接:每个数据报之间相互独立地进行路由选择,可不按发送顺序接收。IP首部格式如下:下面就用这幅图结合Wireshark来分析个字段含义。这次截取的是DNS数据报,它位于应用层。首先看一下整个IP首部的内容:对应的原始原创 2014-05-24 15:47:07 · 3868 阅读 · 0 评论 -
四次握手终止连接
和建立连接时的三次握手类似,三次握手的标识为SYN,四次握手的标识为FIN。由于TCP连接是全双工,所以发送了FIN的一端只是关闭了发送连接,但仍然可以接受数据。所以,若要彻底关闭连接,则需要双方都发送FIN。还是通过实验来观察四次握手流程。当通过SSH软件输入exit命令时,客户端发出带FIN标识的TCP包:服务器收到FIN后,发送一个ACK包,确认序号应该为收到的序原创 2014-05-11 16:32:07 · 873 阅读 · 0 评论 -
三次握手建立连接
建立连接的过程如下:客户端发送一个SYN段表示发起连接请求,该段中包含一个初始序号ISN。服务器也发送一个SYN段并包含它自己的初始序号ISN,同时设置ACK标志表示对上一个客户端的SYN的确认,确认序号为客户端的ISN值加1,该确认序号表示服务器希望下一次收到的起始序号。客户端再发送一个ACK以确认服务器发来的SYN,确认序号为服务器ISN加1,含义同上。三次握手完成,连接建立。原创 2014-06-07 13:40:35 · 1344 阅读 · 0 评论 -
TCP首部
TCP的数据被封装在一个IP数据报中:TCP首部如下图所示:下面以此讲解这些字段的含义。16位源端口号、16位目的端口号。用于寻找发送端和接收端应用进程。一个IP地址(IP首部)加一个端口号(TCP首部)称为一个套接字,一对套接字可唯一确定一个TCP连接。32位序号。用来标识数据字节流中的字节,它的值表示该报文段中第一个数据字原创 2014-06-05 19:52:33 · 3192 阅读 · 0 评论 -
UDP用户数据报协议和IP分组
UDP整体的封装格式如下:下面是8字节UDP首部:当IP层根据协议字段把UDP报文向上传送到UDP模块后,UDP模块再根据端口号将数据发送到相应的进程中,以此实现进程到进程间的通信。16位UDP长度代表UDP首部和UDP数据的总字节数。长度最小可以为8,即数据段不包含实际内容。以下是抓包结果:不原创 2014-06-04 14:11:22 · 4376 阅读 · 0 评论 -
复位报文段
一般来说,一个报文段发往一个套接字时出现错误,TCP都会发出一个复位报文段给源主机。下面是用转包软件做的实验,使用telnet远程登录一个服务器,而选择的连接端口没有打开。客户端发送SYN包到一个未知端口,然后收到一个RST包。可以看到,telnet软件总共进行了三次连接尝试。参考:《TCP/IP详解》 P186.原创 2014-05-13 19:37:21 · 1406 阅读 · 0 评论 -
【TCP/IP】以太网帧格式
链路层包含需要协议,最重要的当属以太网协议。以太网协议又分许多个版本,这里记录的是Ethernet V2。它的帧格式如下:目的地址(6字节) + 源地址(6字节) + 类型(2字节) + 数据(46~1500字节) + CRC校验(4字节)下面看几个实例,由于抓包工具Wireshark把CRC字段给过滤掉了,所以看不到这个字段。TCP包(传输层):UDP包(传输层)原创 2014-05-23 17:24:04 · 1736 阅读 · 0 评论