mirror of
https://github.com/riba2534/TCP-IP-NetworkNote.git
synced 2026-07-09 14:26:06 +08:00
完成第三章 网络地址的初始化与分配
This commit is contained in:
76
README.md
76
README.md
@@ -8,7 +8,7 @@
|
||||
|
||||
所以本笔记中只学习有关于 Linux 的部分。
|
||||
|
||||
## 第一章:理解网络编程和套接字
|
||||
## 第 1 章:理解网络编程和套接字
|
||||
|
||||
本章代码,在[TCP-IP-NetworkNote](https://github.com/riba2534/TCP-IP-NetworkNote)中可以找到,直接点连接可能进不去。
|
||||
|
||||
@@ -298,7 +298,7 @@ file descriptor 3: 16
|
||||
|
||||
> 答:暂略。
|
||||
|
||||
## 第二章 套接字类型与协议设置
|
||||
## 第 2 章 套接字类型与协议设置
|
||||
|
||||
本章代码,在[TCP-IP-NetworkNote](https://github.com/riba2534/TCP-IP-NetworkNote)中可以找到,直接点连接可能进不去。
|
||||
|
||||
@@ -457,7 +457,7 @@ Function read call count: 13
|
||||
|
||||
> 答:TCP 不存在数据边界。在接收数据时,需要保证在接收套接字的缓冲区填充满之时就从buffer里读取数据。也就是,在接收套接字内部,写入buffer的速度要小于读出buffer的速度。
|
||||
|
||||
## 第三章 地址族与数据序列
|
||||
## 第 3 章 地址族与数据序列
|
||||
|
||||
本章代码,在[TCP-IP-NetworkNote](https://github.com/riba2534/TCP-IP-NetworkNote)中可以找到。
|
||||
|
||||
@@ -879,6 +879,76 @@ addr.sin_addr.s_addr = inet_addr(serv_ip); //基于字符串的IP地址初始化
|
||||
addr.sin_port = htons(atoi(serv_port)); //基于字符串的IP地址端口号初始化
|
||||
```
|
||||
|
||||
### 3.5 基于 Windows 的实现
|
||||
|
||||
略
|
||||
|
||||
### 3.6 习题
|
||||
|
||||
> 答案仅代表本人个人观点,不一定正确
|
||||
|
||||
1. **IP地址族 IPV4 与 IPV6 有什么区别?在何种背景下诞生了 IPV6?**
|
||||
|
||||
答:主要差别是IP地址所用的字节数,目前通用的是IPV4,目前IPV4的资源已耗尽,所以诞生了IPV6,它具有更大的地址空间。
|
||||
|
||||
2. **通过 IPV4 网络 ID 、主机 ID 及路由器的关系说明公司局域网的计算机传输数据的过程**
|
||||
|
||||
答:网络ID是为了区分网络而设置的一部分IP地址,假设向`www.baidu.com`公司传输数据,该公司内部构建了局域网。因为首先要向`baidu.com`传输数据,也就是说并非一开始就浏览所有四字节IP地址,首先找到网络地址,进而由`baidu.com`(构成网络的路由器)接收到数据后,传输到主机地址。比如向 203.211.712.103 传输数据,那就先找到 203.211.172 然后由这个网络的网关找主机号为 172 的机器传输数据。
|
||||
|
||||
3. **套接字地址分为IP地址和端口号,为什么需要IP地址和端口号?或者说,通过IP地址可以区分哪些对象?通过端口号可以区分哪些对象?**
|
||||
|
||||
答:有了IP地址和端口号,才能把数据准确的传送到某个应用程序中。通过IP地址可以区分具体的主机,通过端口号可以区分主机上的应用程序。
|
||||
|
||||
4. **请说明IP地址的分类方法,并据此说出下面这些IP的分类。**
|
||||
|
||||
- 214.121.212.102(C类)
|
||||
- 120.101.122.89(A类)
|
||||
- 129.78.102.211(B类)
|
||||
|
||||
分类方法:A 类地址的首字节范围为:0~127、B 类地址的首字节范围为:128~191、C 类地址的首字节范围为:192~223
|
||||
|
||||
5. **计算机通过路由器和交换机连接到互联网,请说出路由器和交换机的作用。**
|
||||
|
||||
答:路由器和交换机完成外网和本网主机之间的数据交换。
|
||||
|
||||
6. **什么是知名端口?其范围是多少?知名端口中具有代表性的 HTTP 和 FTP 的端口号各是多少?**
|
||||
|
||||
答:知名端口是要把该端口分配给特定的应用程序,范围是 0~1023 ,HTTP 的端口号是 80 ,FTP 的端口号是20和21
|
||||
|
||||
7. **向套接字分配地址的 bind 函数原型如下:**
|
||||
|
||||
```c
|
||||
int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);
|
||||
```
|
||||
|
||||
**而调用时则用:**
|
||||
|
||||
```c
|
||||
bind(serv_sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)
|
||||
```
|
||||
|
||||
**此处 serv_addr 为 sockaddr_in 结构体变量。与函数原型不同,传入的是 sockaddr_in 结构体变量,请说明原因。**
|
||||
|
||||
答:因为对于详细的地址信息使用 sockaddr 类型传递特别麻烦,进而有了 sockaddr_in 类型,其中基本与前面的类型保持一致,还有 sa_sata[4] 来保存地址信息,剩余全部填 0,所以强制转换后,不影响程序运行。
|
||||
|
||||
8. **请解释大端序,小端序、网络字节序,并说明为何需要网络字节序。**
|
||||
|
||||
答:CPU 向内存保存数据有两种方式,大端序是高位字节存放低位地址,小端序是高位字节存放高位地址,网络字节序是为了方便传输的信息统一性,统一成了大端序。
|
||||
|
||||
9. **大端序计算机希望把 4 字节整数型 12 传递到小端序计算机。请说出数据传输过程中发生的字节序变换过程。**
|
||||
|
||||
答:0x12->0x21
|
||||
|
||||
10. **怎样表示回送地址?其含义是什么?如果向会送地址处传输数据将会发生什么情况?**
|
||||
|
||||
答:127.0.0.1 表示回送地址,指的是计算机自身的IP地址,无论什么程序,一旦使用回送地址发送数据,协议软件立即返回,不进行任何网络传输。
|
||||
|
||||
## 第 4 章 基于 TCP 的服务端、客户端(1)
|
||||
|
||||
本章代码,在[TCP-IP-NetworkNote](https://github.com/riba2534/TCP-IP-NetworkNote)中可以找到。
|
||||
|
||||
### 4.1 理解 TCP 和 UDP
|
||||
|
||||
|
||||
|
||||
## License
|
||||
|
||||
Reference in New Issue
Block a user