
网络协议
文章平均质量分 76
系统的介绍常用的网络协议(如ARP, IP, TCP, UDP, HTTP等),深入剖析协议的原理。让读者不仅可以知其然,而且可以知其所以然。覆盖面试中的一些常见问题。
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
china_jeffery
持续学习者;
擅长开发开源组件及相关工具;
长期致力于应用各种IT新技术提升生产效率和解决实际问题;
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
如何实现一个高速文件下载器
我们从网络上下载文件时通常会使用浏览器或者迅雷这样的下载软件,他们的大多具有高速下载(下载速度快),断点续传(可以暂停之后继续下载)等特性。假如我们自己开发的应用软件中也需要支持这些下载功能,我们该如何设计和实现了?本文主要围绕这一问题进行论述。首先,我们将一个完善的文件下载库需要具有的特性列举出来:多线程分片下载断点续传磁盘缓存最高下载速率限制及实时下载速率反馈(可选)多协议支持,跨平台(可选)1. 多线程分片下载Chrome浏览器和迅雷能实现高速下载的核心就是多线程分片下载(这里忽略原创 2020-07-09 11:28:37 · 1659 阅读 · 0 评论 -
Windows网络包中IP报文校验和为0
在使用wireshark抓包时发现抓到的包checksum为0,但应用能够正常发送和接收数据。出现这种问题的原因是:我们开启了网卡的“硬件校验和”的功能。开启了这个功能之后协议栈就不会进行校验和的计算了,有助于提高网络性能。因为协议栈没有计算校验和,所以wireshark抓到的包中checksum为0. 要解决这个问题,关闭网卡的“硬件校验和”的功能就可以了。原创 2018-01-05 20:50:01 · 119912 阅读 · 0 评论 -
网络协议 -- 基础概念
一、TCP/IP协议栈二、IP地址、子网掩码、网关2.1 IP地址及分类IP地址相当于互联网上的门牌号, 计算机在启动的时候可以从磁盘(无盘系统例外)上读取该主机的IP配置。IP地址由4个字节(也就是32位)的二进制码组成,包含了网络号( net-id )和主机号( host-id )。但现实中,我们经常还需要再继续划分“子网”,这时就需要借用主机号的一部分充任子网号,这样...原创 2018-01-05 18:53:59 · 116401 阅读 · 4 评论 -
网络协议 -- ARP和RARP协议
一、ARP协议1.1 ARP协议介绍ARP(Address Resolution Protocol)地址解析协议,位于TCP/IP协议栈中的链路层。当局域网内主机间(或者是主机与网关间)需要通信时,通过使用ARP协议获取目标IP地址对应的硬件MAC地址,然后主机间通过该硬件MAC地址完成数据包发送和接收。 具体过程如下:本地主机在局域网中广播ARP请求,ARP请求数据帧中包含目原创 2018-01-04 17:10:47 · 123757 阅读 · 2 评论 -
网络协议 -- IP协议
IP协议是TCP/IP协议族中最核心的协议。所有的TCP、UDP、ICMP、IGMP数据都以IP数据报的格式传输。IP协议是不可靠、无连接的:不可靠表示IP协议不能保证IP数据报能成功的到达目的地。IP仅提供传输服务,任何可靠性的要求都必须由上层来提供(如TCP)。如果传输过程发生错误,IP协议简单的丢弃该数据报,然后发送ICMP消息给发送端。无连接表示IP协议不维护任何关于后续数据报...原创 2018-01-05 19:22:00 · 118480 阅读 · 1 评论 -
网络协议 -- IP地址
本文介绍在网络编程中涉及到的与IP地址相关的操作。关于IP的分类等基础知识,可以参考:网络协议 – 基础概念一、相关结构体struct in_addr// sizeof(in_addr) == sizeof(ULONG) == 4//typedef struct in_addr { union { struct { UCH原创 2017-12-28 22:03:54 · 96208 阅读 · 0 评论 -
网络协议 -- ICMP协议(1) 报文格式
互联网控制消息协议(英文:Internet Control Message Protocol,ICMP)是互联网协议族的核心协议之一。定义在RFC 792文档中。 ICMP的消息大致可以分为两类:一类是差错报文,即通知出错原因的错误消息(如traceroute),另一类是查询报文,即用于诊断的查询消息(如ping)。 使用ICMP协议的典型应用有ping和traceroute(windows上原创 2018-01-12 16:33:58 · 104777 阅读 · 2 评论 -
网络协议 -- ICMP协议(2) Ping程序
一、Ping实现原理大多数系统都已经在内核中内置了ping服务器的功能,所以不需要单独的其他进程来接收主机的ping请求。windows系统下,输入ping /?命令查看ping的用法如下:用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-原创 2018-01-16 00:21:49 · 95305 阅读 · 0 评论 -
网络协议 -- ICMP协议(3)Tracert程序
Tracert是windows系统提供的一个工具,使用该程序可以让我们看到IP数据报从一台主机到另一台主机所经过的路由器。Linux系统也提供了类似的工具,叫traceroute,功能和Tracert一样。一、 Tracert原理在介绍Tracert的原理之前,需要先弄清楚IP首部TTL字段的含义,IP报文每经过一个路由器,路由器都会将该IP报文首部的TTL字段减1, 当路由器收到一原创 2018-01-23 17:06:54 · 123073 阅读 · 0 评论 -
网络协议 -- UDP协议(1)介绍
一、什么是UDP协议?UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI参考模型中的传输层协议,它是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 UDP的正式规范是IETF RFC768。UDP在IP报文的协议号是17。 ISO七层模型: 1.1 UDP报头UDP报头的结构如图: UDP报头由4个部...原创 2017-12-28 16:12:59 · 134929 阅读 · 1 评论 -
网络协议 -- UDP协议(2)单播
一、发送端因为UDP不是面向连接的,且不可靠的,所以发送端在调用sendto之后,就算sendto返回成功,也不代表接收端一定收到了数据,可能接收端压根都没启动,也是有可能的。不能根据sendto的返回值来确保接收端一定收到了数据。如果需要数据传输的可靠性得到保证,可以使用TCP或者通过业务逻辑来保证。#include #pragma comment(lib, "Ws2_32.lib原创 2017-12-29 16:01:51 · 97419 阅读 · 0 评论 -
网络协议 -- UDP协议(3)广播
UDP的广播和单播的不同在于发送端(接收端的实现和单播方式没有区别)的实现上: 1. 发送端将套接字配置为发送广播消息,使用setsockopt函数。 2. 发送地址更改为受限的广播地址255.255.255.255。 需要说明的是广播地址不仅仅只有255.255.255.255一个。广播地址分为受限的广播、指向网络的广播、指向子网的广播、指向所有子网的网广播。255.255.255.原创 2017-12-29 16:36:11 · 98233 阅读 · 0 评论 -
网络协议 -- UDP协议(4)组播
组播就是将数据发送到一组主机。接收端如果要接收消息,则需要加入到该分组,分组是用IP来标识的。 从网络协议–UDP协议(1)介绍可以知道,适用于分组的IP有224.0.0.0 ~ 239.255.255.255。 同样,发送端就需要将数据发送到该分组IP。一、发送端#include #pragma comment(lib, "Ws2_32.lib")void SendLog原创 2017-12-29 17:12:43 · 100430 阅读 · 2 评论 -
网络协议 -- UDP协议(5)UDP的IOCP实现
关于IOCP网络模型的介绍可以参考:http://blog.youkuaiyun.com/china_jeffery/article/details/78815373 IOCP模型对协议是没限制的,无论是TCP还是UDP都是支持的。 UDP的IOCP模型实现的不同之处在于投递发送请求和接受请求所用的函数不同:int WSARecvFrom( SOCKET s, LPWSABUF lpBuffe原创 2017-12-29 18:02:19 · 100995 阅读 · 0 评论 -
网络协议 -- TCP协议(1)特性及协议首部
一、TCP特性尽管TCP和UDP都是用IP协议作为网络层,但TCP却提供和UDP完全不同的网络服务。TCP是面向连接的、稳定可靠的字节流服务。TCP首部的很多字段都是为了实现这2大特性而设计的。在一个TCP连接中,仅有两方能进行彼此通信。所以说广播和多播不适用于TCP协议。为了通过IP数据报实现可靠性传输,需要考虑很多事情,如数据的破坏、丢包、重复以及分片顺序混乱等问题。TCP通过检验...原创 2018-01-29 14:45:58 · 79279 阅读 · 0 评论 -
网络协议 -- TCP协议(2)三次握手与四次挥手
一、完整的TCP会话流程图本文通过真实的网络示例来讲解TCP的三次握手和四次挥手。读者可以先从http://download.youkuaiyun.com/download/china_jeffery/10229731处下载作者写本文时使用的网络包示例,然后使用wireshark打开(当然也可以使用wireshark随便抓取一个网络包),选中编号为No.9的包,右键选择“追踪流” –> “TCP流”...原创 2018-01-29 17:45:02 · 79653 阅读 · 2 评论 -
网络协议 -- TCP协议(3)TIME_WAIT及MSL
关于TCP的4次挥手过程参考:网络协议 – TCP协议(2)三次握手与四次挥手一、TIME_WAIT状态为何存在?这里我们不使用“客户端”、“服务端”来表示TCP连接的2端,转而使用“主动断开连接端”、“被动断开连接端”来表示TCP通讯的2端。因为执行主动断开连接的端可能是服务端也可能是客户端(虽然我们大多数情况下遇到的是客户端执行主动断开)。在“主动断开连接端”收到了“被...原创 2018-01-30 15:56:40 · 81808 阅读 · 1 评论 -
网络协议 -- TCP协议(4)为什么要进行3次握手?
前面的文章《网络协议 – TCP协议(2)三次握手与四次挥手》介绍了TCP的三次握手,那么TCP的握手为什么是3次了? 下面是截取自《网络协议 – TCP协议(2)三次握手与四次挥手》的三次握手过程图: 本文从3个角度来解释为什么要进行3次握手?1TCP的握手的目的是让通信双方都确定双方能够正常发送和接收信息。第一步,服务端收到客户端发送的SYN, 服务端能够确定如...原创 2018-03-13 22:18:49 · 46976 阅读 · 0 评论 -
网络协议 -- TCP协议(5)为什么要进行4次挥手?
前面的文章《网络协议 – TCP协议(2)三次握手与四次挥手》介绍了TCP的四次挥手,那么TCP的挥手断开为什么是4次了? 下面是从《网络协议 – TCP协议(2)三次握手与四次挥手》中截取的TCP四次挥手的过程图例(需要注意的是这个图中“主动断开方”在是服务端,在右边): 对比上面的图,我们不难发现:4次挥手相比3次握手多了一次,主要是因为握手的ACK和SYN是合并在一条发送...原创 2018-03-13 23:01:05 · 50824 阅读 · 1 评论 -
网络协议 -- HTTP协议
一、HTTP协议介绍1.1 什么是HTTPHTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP协议位于TCP/IP协议栈的传输层。HTTP是一个客户端和服务器端请求和应答的标准,主要用于从万维网(即WWW,全称 World Wide Web)服务器传输超文本到本地浏览器之间的请求数据和响应数据的协议。客户端通过使用网页浏览器或者其它的...原创 2018-03-09 13:46:25 · 57418 阅读 · 12 评论 -
网络协议 -- HTTPS(1)密码学基础
一、对称加密算法对称加密算法(英文:Symmetric-key algorithm)是指密码学中的一类加密算法,又称为:私钥加密、共享密钥加密。这类算法在加密和解密时使用相同的密钥(或者这2个密钥可以通过简单的规则相互推算)。 “对称加密算法”比“非对称加密算法”速度更快,但对称加密算法的主要缺点在于要求加密和解密的双方获取相同的密钥,这样只要密钥被泄漏,则密文将不再安全。【常见...原创 2018-03-09 15:46:24 · 41029 阅读 · 0 评论 -
网络协议 -- HTTPS(2)数字签名与数字证书
一、数字签名数字签名(英文:Digital Signature)类似于我们写在纸上的手写签名,它的诞生主要是为了解决如下问题: 1. 证明该文件(或信息)是由你发送的。 2. 证明该文件(或信息)没有被他人篡改过。其实,我们生活中手写签名的纸质合同也是通过各种形式达到上面2个效果(如:合同一式多份,每份合同都有双方签名等)。数字签名利用了《对称与非对称加密算法》中介绍的“非对称加密...原创 2018-03-15 15:26:15 · 39674 阅读 · 0 评论 -
网络协议 -- HTTPS(3)SSL/TSL协议
一、现在开始聊HTTPS前面的《网络协议 – HTTP协议》我们介绍了HTTP协议,然后又写了几篇关于HTTPS的预备知识的文章,现在开始正式介绍HTTPS。在HTTP请求过程中,客户端与服务端之前没有进行身份确认,而且传输的数据都没有加密处理,所以很容易被劫持和篡改。基于HTTP协议的这些弊端,后面就出现了HTTPS(严格的说,HTTPS并不是一个协议,所以前面文章都没有使用“HTT...原创 2018-03-12 12:23:28 · 43320 阅读 · 0 评论 -
网络协议 -- 常用网络协议首部结构体
在定义协议首部数据结构时,需要考虑字节对齐、大小端的问题,可以参考: 彻底理解内存对齐 大端(Bid Endian)、小端(Little Endian)含义大小端的判断使用了rtc_base/basictypes.h头文件中提供的宏RTC_ARCH_CPU_LITTLE_ENDIAN和RTC_ARCH_CPU_BIG_ENDIAN。结构体定义如下:#ifndef RTC_NETWO...原创 2018-01-15 23:48:01 · 93309 阅读 · 0 评论