TCP/IP网络编程基础知识
1. Socket
1)Socket简介
a)一种编程接口,用于不同计算机之间通信的接口
b)一种特殊的文件描述符
c)并不局限于TCP/IP协议
d)面向连接和面向无连接的Socket都存在
e)独立于具体协议,TCP和UDP都可以使用
2)Socket类型
a) 流式套接字(SOCK_STREAM)
提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送发送且按发送顺序接收。内设置流量控制。数据被看作是字节流,无长度限制。
b)数据包套接字(SOCK_DGRAM)
提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。
c)原始套接字(SOCK_RAW)
可以对较低层次协议如IP、ICMP直接访问。
3)Socket的位置
2. IP地址
1)IP地址是Internet中主机的标识
a) Internet中的主机要与别的机器通信必须具有一个IP地址
b)IP地址为32位(IPV4)或者128位(IPV6)
c)每个数据包必须携带目的的IP地址和源IP地址,路由器依靠此信息为数据包选择路由
2)表示形式:常用点分形式,如192.168.1.1.245,最后都会转换为一个32位的无符号整数。
3)IP地址分类
IP地址=网络号 + 主机号,目前有如下分类:
举例:IP地址:192.168.1.1.245,192转换为二进制为 1100 0000,所以该类地址为C类IP地址。
注1:网络号用于区分不同网络。
注2:特殊IP
a)127.0.0.1 回环地址
b)192.168. 局域网
c)主机号全为“1”的ip地址,叫做广播地址。所谓广播,指同时向同一子网所有主机发送报文。
D)主机号全为“0”的ip地址,叫做网络号地址。网络号地址代表这个网络段本身。
4)掩码,网络全为1,主机号全为0的地址。作用计算出网络号地址。
示例: 本地主机ip为192.168.1.245,掩码为255.255.255.0。
掩码 & ip地址 = 网络号,所以本地主机所在的网络号地址为:
192.168.1.245 & 255.255.255.0 = 192.168.1.0
3. 端口号
为什么要引入端口号?举一个例子即可明白。
A计算机中进程m与B计算机中进程n通信,A计算机根据ip地址可找到B计算机,可是如何查找到B计算机中进程n?这就是端口号的作用区分进程。
1)要进行网络通信,必须先申请一个端口号,
2)一个端口只能分配一次,
3) 端口号一般由IANA (Internet Assigned NumbersAuthority) 管理
4)从网络层接收到数据之后,就会检查数据包的目的端口,送给该端口号对应的进程
5)众所周知端口:1~1023(1~255之间为众所周知端口,256~1023端口通常由UNIX系统占用)
常见的保留端口号如下:
· FTP: 21
· TELNET: 23
· SMTP: 25
· DNS: 53
· TFTP: 69
· HTTP: 80
已登记端口:1024~49151
动态或私有端口:49152~65535
4. 字节序
1)不同类型CPU的主机中,内存存储多字节整数序列有两种方法,称为主机字节序(HBO):
a)小端序(little-endian)-低序字节存储在低地址中,如Intel、AMD等芯片厂商
b)大端序(big-endian)-高序字节存储在低地址中,如ARM、Motorola等
2)网络中传输的数据必须按网络字节序,即大端字节序
3)在大部分PC机上,当应用程序将整数送入socket前,需要转化成网络字节序;当应用程序从socket取出整数后,需要转化成小端字节序。
注:在实际编程中无论是Intel还是ARM都有转化成网络字节序这一步,按理来说只有Intel需要这一步,ARM不需要,但是Linux为了编程的统一规范,都有这一步,只不过Intel这一步为真操作,ARM为伪操作。
4)大端序图例说明
注:地字节序是低字节序。
小端序:与大端序相反。
5)字节序转换函数
把给定系统所采用的字节序称为主机字节序。为了避免不同类型主机之间在数据交换时由于对于字节序的不同而导致的差错,引入了网络字节序。
a)主机字节序到网络字节序
u_long htonl (u_longhostlong);
u_short htons (u_short short)
b)网络字节序到主机字节序
u_longntohl (u_long hostlong);
u_shortntohs (u_short short);
TCP/IP网络编程基础知识相关推荐
- TCP/IP网络编程 - 基础学习
1. 创建Socket #include<sys/types.h> #include<sys/socket.h>int sock = ::socket(PF_INET, SOC ...
- 高等学校计算机科学与技术教材:tcp/ip网络编程技术基础,TCP/IP网络编程技术基础...
TCP/IP网络编程技术基础 语音 编辑 锁定 讨论 上传视频 <TCP/IP网络编程技术基础>是2012年北京交通大学出版社出版的图书,作者是王雷. 书 名 TCP/IP网络编程技 ...
- TCP/IP网络编程(一)
TCP/IP网络编程读书笔记 第1章 理解网络编程和套接字 1.1 理解网络编程和套接字 1.1.1 构建打电话套接字 1.1.2 编写 Hello World 套接字程序 1.2 基于Linux的文 ...
- Linux网络编程基础知识
Linux网络编程基础知识 1. 协议的概念 1.1 什么是协议 1.2 典型协议 2 网络应用程序设计模式 2.1 C/S模式 2.2 B/S模式 2.3 优缺点 3 分层模型 3.1 OSI七层模 ...
- 计算机tcpip网络原理与应用,清华大学出版社-图书详情-《TCP/IP网络编程原理与技术》...
前言 随着Internet的发展,网络技术已经渗透到人们的生活和工作中.TCP/IP已经成为最流行的网络协议,且还在演变以满足未来的需要.在速度越来越快的计算机硬件和不断更新的软件发展的背后,TCP/ ...
- 《TCP/IP 网络编程》笔记
本文主要基于<TCP/IP 网络编程>这本书进行总结,主要针对 Linux 网络编程部分进行阐述,Windows 网络编程部分有需要建议阅读原书籍. 一.基础知识 网络编程 网络编程就是编 ...
- 华为顶级网络工程师分享出这份TCP/IP网络编程笔记,已封神
都说程序员工资高.待遇好, 2022 金九银十到了,你的小目标是 30K.40K,还是 16薪的 20K?作为一名 Java 开发工程师,当能力可以满足公司业务需求时,拿到超预期的 Offer 并不算 ...
- TCP/IP网络编程之四书五经
TCP/IP网络编程之四书五经 孟岩 TCP/IP协议是目前广域网和局域网通用的网络协议,因此,基于TCP/IP的编程就格外重要.从 应用上来说,现在直接利用C层次Socket API进行TCP/IP ...
- Java 网络编程基础知识
Java 网络编程基础知识 基础概念 计算机网络的基本概念 网络:多台计算机使用网络设备互联在一起,计算机之间可以进行通信,这样就组成了一个计算机网络. 网络设备:集线器(HUB),路由器,交 ...
最新文章
- java输出数组中出现的次数最多的那个及次数
- CUDA(六). 从并行排序方法理解并行化思维——冒泡、归并、双调排序的GPU实现
- Unity3d 控制物体移动、旋转、缩放
- 阿里云前端周刊 - 第 14 期
- python3 for_python3 for循环-range遍历
- java获取keyvault_教程:在 Java Spring Boot 应用中使用 Azure 应用程序配置 Key Vault 引用 | Microsoft Docs...
- Java 8实战 第一章笔记
- 程序设计与算法----递归之放苹果问题
- vi测试仪维修成功率高吗?_老客户维护难,转介绍更难,这16个问题你做到了吗?...
- 全网首发:成功解决UOS系统上运行JAVA程序任务栏名称问题
- 【UVA514】+【HDOJ1022]:出栈序列的可能性问题
- Center7.8服务器配置Tor服务和obfs4
- hiddenlayer安装
- linux的批处理文件怎么写,Linux下批处理文件编写
- c盘空间不足怎么清理(电脑磁盘空间不足怎么清理)
- 解决git 中 error 10053 问题
- 2020笔记本选购推荐
- 家电消费市场潜力爆发,智能制造成发展趋势
- b站docker学习记录
- POJ2228 Naptime
热门文章
- Socket模拟HTTP协议之火车票购票软件
- (RPA)学习——谈谈关于“滑动”验证码与按照“语序”点击两类验证码
- 【不懂】js中必须使用字符串形式调用函数的情况
- 一、文本框和按钮不对齐现象(高度得设置一样)
- 华为GT Runner测评配件及三方对接全方位提升专业体验
- 数据存储方式之 TXT 文本
- Windows(win)10安装JDK并配置环境变量(附网盘下载地址)
- 田字格字帖生成器、孩子取名系列工具
- xcode 下载地址 (复制粘贴到迅雷里面就可以了,最好买个几小时的迅雷会员这样快些)
- 【敏感词汇过滤算法】基于DFA-前缀树的敏感词汇过滤算法(项目实用)