目录
1、协议就是指通信双方约定好的数据发送和接受以及解析的规则。
2、UDP(User Datagram Protocol)概念:
前言
连续七天课中的最后两天,开了一门新课:网络编程,课程为时八天,最后一天需要利用到目前为止所有学到的内容,独立完成一个综合项目。
这两天的学习的主要内容有:第一天,网络编程概述、网络基础知识和TCP网络编程;第二天,UDP网络编程。
这两天的重点难点有:开放系统互联模型的结构,TCP/IP协议族体系的结构以及体系中各层次的协议,TCP和UDP的异同,以及TCP和UDP网络编程的使用。
网络编程的课程特点是:框架较为固定,更加注重思维逻辑,代码量较大,本次总结将围绕这两天的重点难点,深化理论知识理解、强化TCP和UDP网络编程的代码逻辑。
周四
一、网络编程概述
1、协议就是指通信双方约定好的数据发送和接受以及解析的规则。
2、网络的发展阶段可分为四个:
1、ARRAnet阶段:
使用的协议为NCP(network control protocol),特点是不能互联不同类型的计算机和不同类型的系统,没有纠错功能。
2、TCP/IP两个协议阶段:
TCP协议:用来检测网络传输中的差错的传输控制协议;
IP协议:专门负责对不同的网络进行互联的互联网协议;
3、网络体系结构和开放系统互联模型
网络体系结构:分层而治之,层次之间相互协同,是网络的层次结构和每层所使用的协议的集合。
开放系统互联模型(OSI):是一个理想化的模型,分为七层,从上到下依次是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层(物数网传会表应)。
4、TCP/IP协议族体系结构
TCP/IP协议族是可以应用的工业标准,分为四层,从上往下分别为:应用层,传输层,网络层和链路层。
TCP/IP与OSI模型对应关系:
二、网络基础知识
1、字节序
小端字节序(little-endian):低字节存储在地址低位、高字节存储在地址高位;
大端字节序(big-endian):高字节存储在地址地位、低字节存储在地址高位;
主机字节序:不同CPU的主机,可能是小端序,可能是大端序。
网络字节序:规定为大端序,发送数据前,需要将主机字节序转为网络字节序,以保证发送和读取的数据一致。
2、如何判断自己的主机是大端存储还是小端存储
方法1:使用指针截取
#include <stdio.h>
int main(int argc, const char *argv[])
{
int num = 0x12345678;
char *p = (char *)#
if(0x12 == *p){
printf("大端\n");
}else if(0x78 == *p){
printf("小端\n");
}
return 0;
}
方式2:使用共用体
#include <stdio.h>
union Test{
int a;
char b;
};
int main(int argc, const char *argv[])
{
union Test t;
t.a = 0x12345678;
if(0x12 == t.b){
printf("大端\n");
}else if(0x78 == t.b){
printf("小端\n");
}
return 0;
}
3、什么情况需要转换字节序,什么情况不需要
需要转换:数据是多字节作为一个整体;
不需要转换:已知传输数据的双方主机为相同的字节序,或者传输的字节序是字符串。
4、字节序转换的函数
h是host,代表主机字节序,n为network,代表网络字节序
l是long,代表4字节,s为short,代表2字节
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong); //主机转网络 4字节
uint16_t htons(uint16_t hostshort); //主机转网络 2字节
uint32_t ntohl(uint32_t netlong); //网络转主机 4字节
uint16_t ntohs(uint16_t netshort); //网络转主机 2字节
5、socket函数
socket函数可用于同主机的进程间通信;
socket函数与TCP/IP协议族配合使用,可实现不同主机的进程间通信;
socket是一个编程接口,是一种特殊的文件描述符,并不仅限于TCP/IP协议,还有UDP协议,它将复杂的网络通信过程封装成IO操作。
套接字的分类:
流式套接字(SOCK_STREAM)--TCP
数据套接字(SOCK_DGRAM)--UDP
原始套接字(SOCK_RAM)
6、IP地址
IPV4 4字节 32bit 由网络号和主机号组成
IPV6 16字节 128bit
对于IPV4而言,IP地址的表示形式 "192.168.80.10" 这种叫做点分十进制,是一个字符串
计算机中存储IP地址是用的无符号4字节整型(unsign