Z小偉
这个作者很懒,什么都没留下…
展开
-
以太网帧和IEEE帧
介绍链路层有两种帧的数据报,以太网ip数据报(RFC 894)和IEEE数据报(RFC 1042)。而在主机需求中要求必须能发送和接收以太网封装格式的数据报,对IEEE没做强制要求。对比以太网和IEEE的封装格式在上图中可以看出,两种帧格式(除了前64bit的报头)的前48bit都是目的地址,后面的48bit都是源地址都是一致的。而后面的16bit的意义则不同,IEEE代码后续数据...原创 2021-12-07 22:14:49 · 205 阅读 · 0 评论 -
udp协议
介绍udp数据报紧接在ip首部后面,它不提供可靠性。RFC 768是UDP的正式规范文档。结构udp的结构如文章开头所示,具体涵义如下: Source port(2字节):源端口号。 Destination port(2字节):目的端口号。 Length(2字节):udp头和udp数据包的总长度。 Checksum(2...原创 2021-12-07 22:14:30 · 83 阅读 · 0 评论 -
ip协议
介绍ip协议(RFC 791)是整个tcp/ip协议族中最为核心的协议。它承接了链路层以及传输层。它提供不可靠、无连接的数据报传送服务。讲解 ip头结构如上所示,具体含义如下: Version(4bit): 头4bit是版本号,ipv4用4表示。 IP HL(4bit): 后面4个bit代码整个ip头占有32bit的长度。 Tos(8...原创 2021-12-07 22:14:37 · 78 阅读 · 0 评论 -
tcp协议
介绍tcp协议是基于ip协议实现的。它提供可靠的,有序的,错误检查的流式字符串在主机的应用层之间基于ip层的通信。它是internet中主要的通信协议。如果应用程序不需要流式的可靠服务,则可以使用udp协议,它提供一个无连接的数据报服务。结构tcp头结构 Source port(2字节):16bit,源端口,所以最大值为65535。 Destination port(2字节...原创 2021-12-07 22:14:20 · 206 阅读 · 0 评论 -
crc循环冗余检验
介绍循环冗余检验(crc)是一种在数字网络和存储设备中用来发现原始数据被改变的错误侦察手段。一般是在数据的最后增加一个crc检验和,它是基于多项式除法的来实现的。原理如果需要计算n bit位的crc值,就需要(n+1) bit位的多项式除数,接着把需要计算crc值的字符串转化成二进制,再后面追加n bit位的0值,最后用原始数据从最左边开始对多项式二进制进行除法运算(或者可以说是做...原创 2021-12-07 22:13:53 · 591 阅读 · 0 评论 -
网络编程-arp协议
介绍arp地址解析协议,它的作用是在ipv4地址和底层网络硬件地址之间的转换,提供从网络层地址到相关硬件地址的动态映射。格式arp帧格式如下: 头14个字节是以太网帧,它的前2个字段DST和SRC分别是目的以太网地址和源以太网地址。如果要发送arp包,则目的以太网地址DST必需设置成ff:ff:ff:ff:ff:ff值。Length or Type字段必需是0x0806。 ...原创 2021-12-07 21:59:26 · 186 阅读 · 0 评论 -
网络编程-tcp的简单封装
介绍Tcp类主要是对windows相关套接字api(socket、bind、listen、connect、accept等)的封装,其中包含了一些socket的相关设置,超时,返回值判断以及数据发送和接收的封装。代码定义主要实现以下功能:listen,监听指定端口。accept,接收新的连接,并返回新连接套接字。connect,连接指定的ip和端口。send,发送指定长度的数据。recv,接收指定长...原创 2021-12-07 21:53:42 · 400 阅读 · 0 评论 -
网络编程-字节序
介绍主机字节序有小端和大端的区分。小端是指低地址位存放数据高位,高地址位存放数据低位;大端是指高地址位存放数据的高位,低地址存放数据的低位。如果通信的双方主机字节序不一样,或者至少有一个是小端的(因为网络字节序为大端),则数据可能就会有问题。所以,在通信过程中,会把整数转化成网络字节序,然后再进行传输,在接收到数据以后,再转化成主机字节序。小端大端实现首先,可以测试主机的字节序是小...原创 2021-12-07 22:13:26 · 72 阅读 · 0 评论 -
网络编程-udp的简单封装
介绍udp类主要是udp通信操作的封装。包含udp套接字的创建,数据的发送和接收。代码定义主要功能如下:create,创建udp套接字。send,向指定ip或者地址发送定长数据包。recv,接收数据,并把发送方的数据保存到指定的参数中。class Udp{public: Udp(); ~Udp(); bool create(); bool send(const char *ip, sh...原创 2021-12-07 21:53:36 · 897 阅读 · 0 评论 -
网络编程-基于tcp实现的例子
介绍时间回显服务是一个很常见的基于tcp或udp的网络通信程序。它监听13号端口来返回给用户当前服务器的时间。实现首先定义一些客户端和服务器都需要用到的变量,因为是跨平台的,所以这里要区分下windows和linux下一些不同之处。#ifndef _COMMON_H_#define _COMMON_H_#ifdef _WIN32#include <winsock.h&...原创 2021-12-07 22:13:41 · 221 阅读 · 0 评论 -
网络编程-基于udp广播实现的例子
介绍udp广播包其实就是往整个局域网内发送udp数据报,而不是单个目的终端。发送udp广播包的时候要记住发送频率,否则很容易形成广播风暴,而导致局域网的网络瘫痪。如果局域网有多个网段,那不同的网段是接收不到其它局域网的广播包的。下面是一个基于udp广播实现的回显服务,这是一个很简单的例子,分为服务端和客户端。代码因为是windows下的网络编程开发,所以先初始化网络环境,使用的是W...原创 2021-12-07 22:04:52 · 307 阅读 · 0 评论