当前位置:文档之家› tcp,ip封装过程协议

tcp,ip封装过程协议

竭诚为您提供优质文档/双击可除tcp,ip封装过程协议

篇一:tcpip详解-卷一-协议-第一章-概述-1.6封装

1.6封装

当应用程序用tcp传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),该过程如图1-7所示。tcp传给ip的数据单元称作tcp报文段或简称为tcp段(tcpsegment)。ip传给网络接口层的数据单元称作ip数据报(ipdatagram)。通过以太网传输的比特流称作帧(Frame)。

图1-7中帧头和帧尾下面所标注的数字是典型以太网帧首部的字节长度。在后面的章节中我们将详细讨论这些帧头的具体含义。

以太网数据帧的物理特性是其长度必须在46~1500字节之间。我们将在4.5节遇到最小长度的数据帧,在2.8节中遇到最大长度的数据帧。

所有的internet标准和大多数有关tcp/ip的书都使用octet这个术语来表示字节。使用这个过分雕琢的术语是有历史原因的,因为tcp/ip的很多工作都是在dec-10系统上进行的,但是它并不使用8bit的字节。由于现在几乎所有的计算机系统都采用8bit的字节,因此我们在本书中使用字节(byte)这个术语。

更准确地说,图1-7中ip和网络接口层之间传送的数据单元应该是分组(packet)。

分组既可以是一个ip数据报,也可以是ip数据报的一个片(fragment)。我们将在11.5节讨论ip数据报分片的详细情况。

图1-7数据进入协议栈时的封装过程

udp数据与tcp数据基本一致。唯一的不同是udp传给ip的信息单元称作udp数据报(udpdatagram),而且udp的首部长为8字节。

回想1.3节中的图1-4,由于tcp、udp、icmp和igmp 都要向ip传送数据,因此ip必须在生成的ip首部中加入某种标识,以表明数据属于哪一层。为此,ip在首部中存入一个长度为8bit的数值,称作协议域。1表示为icmp协议,2表示为igmp协议,6表示为tcp协议,17表示为udp协议。

类似地,许多应用程序都可以使用tcp或udp来传送数据。运输层协议在生成报文首部时要存入一个应用程序的标

识符。tcp和udp都用一个16bit的端口号来表示不同的应用程序。

tcp和udp把源端口号和目的端口号分别存入报文首部中。

网络接口分别要发送和接收ip、aRp和RaRp数据,因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个16bit的帧类型域。

篇二:tcp数据包的封装与发送

tcp数据包的封装与发送

一、实验目的

1.掌握tcp的工作特点;

2.熟悉tcp数据包的结构;

3.深刻理解网络体系结构中传输层与上下层之间的关系;

二、实验环境

1.pc机一台

2.windows操作系统

三、实验准备

1.复习tcp协议的相关内容;

2.熟练掌握tcp数据包中各自段的作用;

四、实验内容(二选一)

1.编写程序构造tcp包结构,并填写各字段,将封装后的tcp包的内容在屏幕上输出并写入指定的文件中;

2.tcp包的数据字段内容额长度自定;

五、实验报告要求

1.报告内容要有主程序的流程图和程序代码;

2.报告内容要有运行结果的截图;

3.对实验过程进行分析,对存在的问题分析。

实验相关代码

#include

#include

#include

#include

#include

#pragmacomment(lib,"ws2_32.lib")

//数据结构及宏定义:

#defineipVeR4//ip协议预定

#definemax_buFF_len65500//发送缓冲区最大值

#definedest_poRt5050//目的端口号

#definesouR_poRt8080//源端口号

typedefstructip_hdr//定义ip首部

{

uchaRh_verlen;//4位首部长度,4位ip版本号

uchaRtos;//8位服务类型tos ushoRttotal_len;//16位总长度(字节)ushoRtident;//16位标识

ushoRtfrag_and_flags;//3位标志位uchaRttl;//8位生存时间ttl uchaRproto;//8位协议(tcp,udp或其他) ushoRtchecksum;//16位ip首部校验和ulongsourceip;//32位源ip地址ulongdestip;//32位目的ip地址

}ip_headeR;

typedefstructtsd_hdr//定义tcp伪首部{

ulongsaddr;//源地址

ulongdaddr;//目的地址

uchaRmbz;//没用

uchaRptcl;//协议类型

ushoRttcpl;//tcp长度

}psd_headeR;

typedefstructtcp_hdr//定义tcp首部{

ushoRtth_sport;//16位源端口

ushoRtth_dport;//16位目的端口

ulongth_seq;//32位序列号

ulongth_ack;//32位确认号

uchaRth_lees;//4位首部长度/6位保留字uchaRth_flag;//6位标志位

ushoRtth_win;//16位窗口大小

ushoRtth_sum;//16位校验和

ushoRtth_urp;//16位紧急数据偏移量

}tcp_headeR;

usingnamespacestd;

//主要函数:

//checksum:计算校验和的子函数ushoRtchecksum(ushoRt*buffer,intsize) {

unsignedlongcksum=0;

while(size>1)

{

cksum+=*buffer++;

size-=sizeof(ushoRt);

}

if(size)

{

cksum+=*(uchaR*)buffer;

相关主题