发送TCP数据包

这篇博客详细介绍了如何发送TCP数据包,包括实验目的、实验要求、TCP的功能、连接建立与终止、提供可靠性的机制,以及TCP首部结构。通过创建原始套接字、构造IP和TCP头、计算校验和,最终实现TCP数据包的发送。实验设计旨在让学生理解TCP的工作原理,并实际操作TCP数据包的填充和发送。
摘要由CSDN通过智能技术生成

一、实验目的:

本设计的功能是填充一个TCP数据包,并发送给目的主机。

二、实验要求:

1)以命令行形式运行:SendTCP  source_IP  source_port  dest_ip  dest_port

其中,SendTCP为程序名,source_IP为源端IP地址,source_port为源端口,dest_ip  为目的IP地址,dest_port为目的端口

2)其他的TCP头部参数请自行设定。

3)数据字段为“This is my homework of network ,I am happy!”.

4)成功发送后在屏幕上输出“Send OK”。

 

三、设计相关知识:

TCP,英文全称Transmission Control Protocol,译为传输控制协议,是一种面向连接的,可靠的,基于比特流的运输层通信协议。TCP协议与IP协议等一起构成目前互联网应用最广的TCP/IP协议族。

1、TCP的功能概述

当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。 TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。

(1)在数据正确性与合法性上,TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和;同时可以使用md5认证对数据进行加密。

(2)在保证可靠性上,采用超时重传和捎带确认机制。

(3)在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。

在拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AIMD算法)。该算法主要包括三个主要部分:1)加性增、乘性减;2)慢启动;3)对超时事件做出反应。

2、TCP连接建立

TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。

TCP三次握手的过程如下:

(1)客户端发送SYNSEQ=x)报文给服务器端,进入SYN_SEND状态。

(2)服务器端收到SYN报文,回应一个SYN SEQ=yACK(ACK=x+1)报文,进入SYN_RECV状态。

(3)客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。

三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

 

 

 

 

 

3、TCP连接终止

建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。具体过程如下图所示。

(1) 某个应用进程首先调用close,称该端执行主动关闭active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。

(2) 接收到这个FIN的对端执行 被动关闭<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值