您的当前位置:首页正文

tcp

2020-11-05 来源:钮旅网
 Lecture 1

 掌握TCP/IP协议栈中两个重要的边界:操作系统边界;地址边界。

TCP/IP协议分为四层结构,这四层结构中有两个重要的边界:一个是将操作系统与应用程序分开的边界;另一个是将高层互联网地址与低层物理网卡地址分开的边界,

应用层 操作系统边界 传输层 应用层由操作系统之上的应用之下各层由操作系统内核应用层 上层使用IP地址 传输层 网际层 地址边界 网络接口层网际层 下层使用物理地址 网络接口层 图7 TCP/IP协议模型的两个边界

 掌握TCP/IP模型和OSI模型的特点。

TCP/IP协议分为四层:应用层、传输层、网络层和网络接口层

网络接口层负责将其之上的网络层要发送出去的数据发送到其下面的物理网络。或接收由物理网络发送到该目标机的数据帧,并抽出IP数据报交网络层。

网际层可以把源主机上的分组根据需要发送到互联网中的任何一台目标主机上。 传输层提供的应用进程之间的通信,也叫端到端(end to end)的通信。 应用层提供面向用户的网络服务。

ISO/OSI网络体系结构 • 应用层 • 表示层 • 会话层 • 传输层 • 网络层

• 数据链路层 为上层(即网络层)提供无差错的数据传输

• 物理层 为设备之间的数据传输提供介质及互连设备,实现比特流的透明传输。 •

 了解为何TCP协议不对网络接口层的具体内容做出规范。 是因为不定义网络接口层的具体内容有如下两点好处: 1.便于实现不同网络的互联;

2.为将来物理网络的发展留下空间;

 Lecture 2

 了解不同的数据传输方式:模拟传输;数字传输

模拟传输的主要优点是信道的利用率较高,但是传输过程中信号会衰减,会受到噪声

干扰,且信号放大时噪声也会同时被放大。

数字传输的主要优点是数字信号只取离散值,信号传输不失真,误码率低等。但是传

输数字信号比传输模拟信号所要求的频带要宽的多,因此数字传输的信道利用率较低

 了解不同的编码技术;数字数据的模拟信号编码、数字数据的数字信号编码和模拟数据的数字信号编码。

数字数据的模拟信号编码;这种编码方式是将数字数据调制成模拟信号进行传输通

常采用三种模拟信号的载波特性(即振幅、频率和相位)之一来表示被调制的数字数据,并由此产生三种基本调制方式:1幅移键控法(ASK) 2 频移键控法(FSK) 3 相移键控法(PSK)

数字数据的数字信号编码;常用的数字信号编码有不归零NRZ (Non Return to Zero)码、差分不归零DNRZ码、曼彻斯特(Manchester)码及差分曼彻斯特(Differential Manchester)码等。

模拟数据的数字信号编码;这里常用的编码技术是脉冲编码调制PCM(Pulse Code Modulation)技术。

 掌握信道复用技术的种类(3种:频分,时分,光分);

 多路复用技术主要有三种:1.频分多路复用;2.时分多路复用;3.光波分多路复用。 • 频分多路复用技术是按频率分割,在同一时刻能同时存在并传输多路信号,每路信号的频带不同;时分多路复用技术按时间分割,每一时隙内只有一路信号存在,多路信号分时轮换地在信道内传输;光波分多路复用技术按波长分割,在同一时刻能同时存在并传送多路信号,每路信号的波长不同,其实质也是频分多路复用。  掌握常用的差错控制方法(2种)。

常用的差错控制方法采用自动重发请求(ARQ)技术和前向纠错技术(FEC); 1.自动重发请求(ARQ)技术

 自动重传请求(ARQ)是OSI模型中数据链路层的错误纠正协议之一。

 它包括停止等待ARQ协议和连续ARQ协议,错误侦测、正面确认、逾时重传与负

面确认继以重传等机制。 2.前向纠错技术(FEC)

FEC(Forward Error Correction )是一种数据编码技术,传输中检错由接收方进行验证,在FEC方式中,接收端不但能发现差错,而且能确定二进制码元发生错误的位置,从而加以纠正。FEC方式必须使用纠错码。发现错误无须通知发送方重发。

 Lecture 3

 掌握IP数据报的格式,比如TTL,TOS等字段。 IP数据报的格式分为报头区和数据区两大部分,其中数据区包括高层协议需要传输的数据,报头区是为了正确传输高层数据而加的各种控制信息。 IP数据报的格式如图 版本号(4位) 头长度(4位) 服务类型TOS (8位) 总 长 度(16位) 标志(3位) 片 偏 移(13位) 标 识 (16位) 生存时间TTL(8位) 上层协议标识(8位) 源 I P 地 址 (3 2位) 目 标 I P 地 址 (3 2位) 选 项 数 据 头 部 校 验 和(16位) 1. 版本号 占用4位二进制数,表示该IP数据报使用的是哪个版本的IP协议。 2. 头长度 用4位二进制数表示,此域指出整个报文头的长度

3. 服务类型(TOS-Type of Service) 用8位二进制数表示,规定对本数据报的处理方式。服务类型字段的8位分成了五个子域。

4. 总长度 用16位二进制数表示,总长度字段是指整个IP数据报的长度,以字节为单位。利用首部长度字段和总长度字段,就可以计算出IP数据报中数据内容的起始位置和长度。由于该字段长度为16位二进制,所以从理论上来说,IP数据报最长可达65535字节

5. 生存时间(TTL-Time to Live) 用8位二进制数表示,它指定了数据报可以在网络中传输的最长时间。在实际应用中为了简化处理过程,把生存时间字段设置成了数据报可以经过的最大路由器数。TTL的初始值由源主机设置(通常为32、64、128或者256),一旦经过一个处理它的路由器,它的值就减去1,当该字段的值减为0时,数据报就被丢弃,并发送ICMP报文通知源主机,这样可以防止数据报进入一个循环回路时,数据报无休止的传输。

6. 上层协议标识 用8位二进制数表示,把收到的IP数据报送TCP或UDP等处理此报文的上层协议

7. 校验和 用16位二进制数表示,这个域用于协议头数据有效性的校验,可以保证IP报头区在传输时的正确性和完整性。

8. 源地址 用32位二进制数表示的发送端IP地址。 9. 目的地址 用32位二进制数表示的目的端IP地址。

 掌握子网与子网掩码的概念,会分析IP地址;

 了解ARP协议的内容 地址解析协议,所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

 Lecture 4

 熟练掌握TCP协议建立过程中的三次握手机制;

TCP使用“3次握手”(3-way handshake)法来建立一条连接。所谓3次握手就是指在建立一条连接时通信双方要交换3次报文。连接的建立过程可以用图4-9表示。具体过程如下:

第1次握手:由客户机的应用层进程向其传输层TCP协议发出建立连接的命令,则客户机TCP向服务器上提供某特定服务的端口发送一个请求建立连接的报文段,该报文段中SYN被置1,同时包含一个初始序列号x(系统保持着一个随时间变化的计数器,建立连接时该计数器的值即为初始序列号,因此不同的连接初始序列号不同)。

第2次握手:服务器收到建立连接的请求报文段后,发送一个包含服务器初始序号y,SYN被置1,确认号置为x+1的报文段作为应答。

第3次握手:客户机收到服务器的应答报文段后,也必须向服务器发送确认号为y+1的报文段进行确认。

 掌握TCP协议和UDP协议的异同;TCP和UDP是传输层使用的两个主要协议。 Tcp面向连接,提供有序可靠的传输;Udp无连接,提供无序不可靠的传输 比较项目 建立的连接与关闭 数据传输效率(当网络可靠时) 对数据的确认 流量控制 丢失分组的重发 协议复杂性 发送端缓冲 分组排序 对重复分组的检测 校验和 TCP 有 低 有 有(滑动窗口) 有 复杂 有 有 有 有 UDP 无 高 无 无 无(由高层应用程序负责) 简单 无 无 无 有(且算法相同) 可能性小(因为在连接建立时,双方通知可能性大(因为应用程序每次输出都产生在低层被分片的情况 各自的MSS,每个TCP报文段的长度不一个UDP报文,当一次有大量数据要输超过MSS) 广播与多播 出时,常在低层被分片) 支持 不支持(因它要建立一对一的连接) 适用场合 可靠性要求高,有大量数据要连续传输,对可靠性要求一般,但要高效传输数据,该协议在互联网应用多 或数据传输量小的应用场合

 掌握几种常见协议的well-known端口号(ftp,telnet等);

众所周知的端口号介于0~1023(其中不同操作系统占据的端口号不同)之间,这些端口号由Internet号分配机构IANA(Internet Assigned Numbers Authority)来管理。一些常用服务的TCP和UDP的众所周知端口号见表4-1和表4-2。 TCP端口号 20 21 23 25 53 80 110 119 UDP端口号 53 67 68 69 161 162

关键词 FTP-DATA FTP Telnet SMTP DOMAIN HTTP POP3 NNTP 关键词 Dsn BOOTPS BOOTPC TFTP SNMP SNMP-TRAP 描 述 文件传输协议(数据连接) 文件传输协议(控制连接) 远程登录协议 简单邮件传输协议 域名服务器 超文本传输协议 邮局协议3 新闻传输协议 描 述 域名服务器 引导协议服务器 引导协议客户机 简单文件传输协议 简单网络管理协议 简单网络管理协议陷阱  Lecture 5

 掌握互联网的两种体系结构; 网络工作模式

• C/S模式 应用系统可以将地域上分散的具有自主功能的计算机通过通信介质连

接成局域网络(LAN),网络中共享的数据或文件存储在功能较强的一台计算机上,称为服务器。在网络系统中,有一些计算机安装了具有某种应用功能的软件,这些应用软件需要使用服务器上存储的可共享的数据或文件,将这些计算机称为客户机,这样的应用系统就是客户机/服务器结构(即Client/Server结构,简称C/S结构)的应用系统。C/S结构是一个典型的两层(double tier)结构的计算机应用模式。 • B/S模式 这样的系统在客户端的计算机上只要求安装浏览器(Browser),用户

通过浏览器提出服务请求后由远程的Web服务器响应用户的请求,通常称为浏览器/服务器结构(即Browser/Server结构,简称为B/S结构),  了解电子邮件相关的协议内容; POP3&SMTP协议

POP3 是邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循 POP3协议的接收邮件服务器,用来接收电子邮

件的。

SMTP 其全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。  了解HTTP协议的工作流程。

在查询得到网页所在的服务器IP地址后,就进入HTTP协议的工作阶段。浏览器向该域名对应的ip地址的主机发出与端口80建立一条TCP连接的请求。80端口是服务器提供Web服务的端口。

连接建立成功后,浏览器发出一条请求传输网页的HTTP命令,格式为:GET /app/exam.html;

当域名的服务器收到请求后,向浏览器发送exam.html文件;

文件发送完成后,由服务器主动关闭TCP连接。至此HTTP的工作过程也结束了

 Lecture 6

 掌握Windows自带的ARP、PING等工具的使用; 1.Windows中ARP工具的使用

• 在Windows系统中,专门提供了一个有关ARP的工具,该工具名称为arp.exe,用户可以使用该工具来查看、添加或删除ARP高速缓存中的表项。

• 查看ARP高速缓存中表项内容的命令是:arp –a; • 手工添加ARP表项的命令是“arp –s”。

例如,要将IP地址为192.168.2.12,其MAC地址为00-cc-dd-ee-88-88的表项加入ARP高速缓存中,可用如下的命令:arp -s 192.168.2.12 00-cc-dd-ee-88-88

• 用“arp –d”命令可以删除ARP高速缓存中的表项。例如,下面删除IP地址为192.168.2.12的ARP高速缓存表项: arp –d 192.168.2.12

2.Ping 工具用于向目的IP地址发送ICMP回送请求,并等待ICMP回送应答。Ping报告接收到的响应数和从发送请求到接收到响应之间的时间间隔。Ping工具可以使用许多不同的选项,例如ping命令带“-t”参数时,可以向目的IP连续发送数据报,直至收到ICMP回送应答,或使用“ctrl+c”中断为止,这可以用来测试网络的连通性。

 掌握Linux系统的简单知识; 1 Linux TCP/IP网络协议栈

Linux是一种基于Unix思想设计的操作系统,其TCP/IP的实现以BSD4.3(BSD是加州大学伯开利分校开发的一种UNIX操作系统,BSD4.3在TCP性能方面有较大的改善)为模型。Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算机上。

Linux以它的高效性和灵活性著称。它能够在PC计算机上实现全部的Unix特性,具有多任务、多用户的能力。 Linux是在GNU公共许可权限下免费获得的,是一个符合POSIX标准的操作系统。Linux操作系统软件包不仅包括完整的Linux操作系统,而且还包括了文本编辑器、高级语言编译器等应用软件。它还包括带有多个窗口管理器的X-Windows图形用户界面,如同我们使用Windows NT一样,允许我们使用窗口、图标和菜单对系统进行操作。

• Linux的IP路由

• 在图6-3中,IP层负责数据传输过程中路由的选择。在Linux系统启动时,通过读

取系统配置文件,配置好计算机的IP地址,初始化网络接口,建立路由表,并向路由表中添加静态路由信息,最终建立计算机的网络连接。整个配置过程可以动态的,也可以是静态的。配置地址有两种方式,如果计算机有一个固定的IP地址,系统管理员可以在配置文件中指定,那么系统启动时,计算机的地址就确定了。如果计算机没有固定的地址,主机可以使用DHCP协议来从DHCP服务器中获得计算机的地址、路由器和DNS服务器等信息。

Linux系统中有一个存放路由信息的转发信息表(FIB),它专门用来保存所有可能的转发地址,另外为了提高路由信息的查找速度,将有关路由信息也存放在高速缓冲中。当一个数据包需要发送到远程主机时,首先从高速缓冲中存放的路由信息中进行查找,如果找到,IP层就使用它进行数据包转发,如果没有找到,IP就从转发信息表中进行查找,并将找到的信息添加到路由缓冲中,然后使用该表项进行数据包的转发

 熟练掌握TCP协议中的慢启动和拥塞避免机制; 慢启动算法和拥塞避免

一个连接建立后,TCP起先只缓慢地发送数据来估计连接的带宽,以避免淹没接收主机或通路上的其他设备和链路。发送窗口大小设为2个TCP段,当两个段都被应答后,窗口大小就扩大为三个段。当三个段都被应答后,发送窗口大小再次扩大。如此进行,直到每次突发传输的数据量达到远程主机所声明的接收窗口大小。此时,慢启动算法就不再用了,改用声明的接收窗口进行流控制。

在传输中的任何时刻都可能发生拥塞。当重发定时器超时,或接收到说明已经有TCP段被路由器丢弃的ICMP“源中止”消息时,就可检测到拥塞。发生这种情况时,TCP拥塞避免算法就减小发送窗口的大小,并使其逐步减小到拥塞发生时的窗口大小的一半,然后,使用慢启动算法来增大发送窗口,使其达到接收主机接收窗口的大小。

 Lecture 7

 了解网络字节序的概念——大序在前,小序在前; 网络字节顺序

不同的主机对字节值的存储顺序不同。在存储由多个字节组成的一个字时,有的计算机在起始地址处存放低整数的低序号字节,这种存储格式叫“小序在前”(little-endian)。而有的计算机在起始地址处存放整数的高序号字节,这种存储格式叫“大序在前”(big-endian)。

 掌握网络通信五元组的概念;

通信的两个进程在端到端的传输层只能使用相同的协议,因此一个完整的主机间的通信,可以简单的用一个五元组来标识通信的两个进程: 协议--本地IP地址--本地端口号/远程IP地址--远程端口号。

综上所述,这样一个五元组可以惟一标识网络中两个通信的进程或一条连接,因此叫做一个相关(association)。为了在进程间进行正确的通信,只有两个协议相同的半相关才能组合成一个可用的相关。  掌握套接口的三种类型;

1. 流式套接口(SOCK_STREAM)

它提供了一种可靠的、面向连接的双向数据传输服务。实现了数据的无差错、无重复地发送。内设流量控制,被传输的数据看作是无记录边界的字节流。在TCP/IP协议族中,使用TCP协议来实现字节流的传输,当用户想要发送大批量的数据,或者对数据的传输有较高的要求时使用流式套接口。 2. 数据报套接口(SOCK_DGRAM)

它提供了一种无连接、不可靠的双向数据传输服务。数据包以独立的包形式被发送,并且保留了记录边界,不提供可靠性保证。数据在传输过程中可能会丢失或重复,并且不能保证在接收端数据按发送顺序接收。 3. 原始套接口(SOCK_RAW)

该套接口允许对较低层协议(如IP或ICMP)进行直接访问。常用于检验新的网络协议实现,也可用于测试新配置或安装的网络设备。要说明的是Windows Sockets规范并没有规定Windows Sockets DLL必须支持原始套接口。

 掌握读写信息的方法——getInputStream()、getOutputStream()等。

调用getInputStream()方法和getOutputStream()方法获得Socket对象的输入流和输出流。 • public InputStream getInputStream() throws IOException:返回该Socket输入流。 • public OutputStream getOutputStream() throws IOException:返回该Socket输出流。

 Lecture 8

 掌握TCP/UDP协议实现的流程(图),熟悉各个函数调用的先后次序;

TCP协议是基于数据流形式进行数据传输的,而UDP协议是基于数据报模式进行数据传输的。

tcp协议内容:其具体工作流程可以分为以下八个步骤:

第一步:使用WSAStartup()函数检查系统协议栈的安装情况。只有在协议栈正确安装的情况下,才可以执行以下的各步骤。常用的调用格式有如下两种:

WSAStartup(0x0202,&wsaData);WSAStartup(MAKEWORD(2,2),&wsaData);

第二步:使用socket()或WSASocket()函数创建服务器端通信的套接口。 SOCKET serverSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); SOCKET serverSocket=socket(AF_INET,SOCK_STREAM,0); SOCKET serverSocket=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,WSA_FLAG_OVERLAPPED); SOCKET serverSocket=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED);

第三步:使用bind()函数将创建的套接口与服务器地址绑定。它确定了相关五元组中的本地IP地址和端口号。常用调用格式:

bind(serverSocket,(const struct sockaddr*)&localaddr, sizeof(sockaddr)); bind(serverSocket,(SOCKADDR*)&localaddr, sizeof(sockaddr)); bind(serverSocket,(sockaddr*)&localaddr, sizeof(sockaddr));

bind(serverSocket,(LPSOCKADDR)&localaddr, sizeof(sockaddr));

第四步:使用listen()函数使服务器套接口做好接收连接请求的准备。该函数的调用格式如下:

listen(serverSocket,queuelen);

第五步:使用accept()或WSAAccept()函数接收来自客户端由connect()发出的连接请求。常用格式:

SOCKET Newsock=accept(serverSocket,(struct sockaddr*)&clientaddr,&clientaddr_len); 第六步:连接建立连接后,使用send()或WSASend()函数发送数据,或使用recv()或WSARecv()函数接收数据。

第七步:使用closesocket()函数关闭套接口。它的使用方法很简单: closesocket(serverSocket);

第八步:最后调用WSACleanup()函数,结束Windows Sockets API的使用。 它是一个无参函数,在程序中直接调用即可:WSACleanup();

/UDP协议内容中:无连接的数据报传输服务通信时,客户端与服务器端所使用的函数是类似的。其工作流程如下:

第一步:使用WSAStartup()函数检查系统协议栈的安装情况。常用格式为: WSAStartup(0x0202,&wsaData);WSAStartup(MAKEWORD(2,2),&wsaData);

第二步:使用socket()或WSASocket()函数创建套接口,以确定了相关五元组的协议。常用格式有如下几种:

 SOCKET s=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);  SOCKET s=socket(AF_INET,SOCK_DGRAM,0);  SOCKET s=WSASocket

(AF_INET,SOCK_DGRAM,IPPROTO_TCP,NULL,0,WSA_FLAG_OVERLAPPED);  SOCKET s=WSASocket

(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);

第三步:使用bind()函数将创建的套接口与本地地址绑定。它确定了相关五元组中的本地IP地址和端口号。

 常用格式:bind(s,(const struct sockaddr*) &localaddr,sizeof(sockaddr))

第四步:使用sendto()或WSASendTo()函数发送数据,也可使用recvfrom()或WSARecvFrom()函数接收数据。

第五步:使用closesocket()函数关闭套接口。

第六步:最后调用WSACleanup()函数,结束Windows Sockets API的使用。

至此,一次无连接的数据报传输过程结束。

 掌握UDP协议中使用的函数和TCP协议中使用的函数的区别;

UDP使用的函数:WSAStartup()函数:创建套接口;检查系统协议栈的安装情况。

socket()函数:创建套接口

bind()函数:bind()函数将创建的套接口与本地地址绑定。 sendto()函数发送数据, recvfrom()函数接收数据。 closesocket()函数关闭套接口。

调用WSACleanup()函数,结束Windows Sockets API的使用。

Tcp使用的函数:

 ELSE

 掌握句柄的概念;

在Windows环境中,句柄是用来标识项目的。

句柄,是整个windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个四字节长的数值,来标志应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的。 句柄是windows用来标志应用程序中建立的或是使用的唯一整数,windows使用了大量的句柄来标志很多对象。

 熟练掌握TCP编程和UDP编程的不同,比如他们是如何分别实现缓冲区的;

 TCP编程中服务器/客户端的代码;

 会进行简单的UDP程序的编写(重点偏于服务器端)。

因篇幅问题不能全部显示,请点此查看更多更全内容