TCP/IP网络编程的基础知识

Socket

简介

  • Socket是一种编程接口
  • Socket是一种文件描述符
  • Socket不仅限于TCP/IP协议
  • 面向连接(TCP)
  • 无连接(UDP)

Socket类型

1、流式套接字
流式套接字(SOCK_STREAM)提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。

2、数据报套接字
数据报套接字(SOCK_DGRAM)提供了无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。

3、原始套接字
原始套接字(SOCK_RAW)可以对较低层次协议(如IP、ICMP)直接访问。

Socket的位置

在这里插入图片描述

IP地址

简介
1)IP地址是Internet中主机的标识

  • Internet中的主机要与别的机器通信必须具备一个IP地址
  • IP地址为32位(IPv4)或者128位(IPv6)
  • 每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据包选择路由

2)IP地址的表示形式
IP地址由四段组成,每个字段是一个字节,8位,最大值是255,
IP地址由两部分组成,即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机。二者是主从关系。
IP地址的四大类型标识的是网络中的某台主机。IPv4的地址长度为32位,共4个字节,但实际中我们用点分十进制记法,如202.38.64.10,最后都会转化为一个32位的无符号整数。

IP地址的分类

IP地址根据网络号和主机号来分,分为A、B、C三类及特殊地址D、E两类,共五类。全0和全一保留不用。

1)A类(1.0.0.0—126.0.0.0)
A类IP地址第一个字节为网络号,后三个字节位主机号。该类IP地址第一个字节的最高位为0,所以A类IP地址的网络号取值于1-126之间,一般用于大型网络。可用的A类网络有126个,每个网络能够容纳1677214个主机。
默认子网掩码:255.0.0.0或0xFF000000。

2)B类(128.0.0.0—191.255.255.255)
B类IP地址前两个字节为网络号,后两个字节为主机号。该类IP地址第一个字节的最高两位是“10”,所以B类IP地址的网络号取值与128-191之间,一般用于中等规模的网络。可用的B类网络有16282个,每个网络能够容纳6万多个主机。
默认子网掩码:255.255.0.0或0xFFFF0000。

3)C类(192.0.0.0—223.255.255.255)
C类IP地址前三个字节为网络号,最后一个字节为主机号,该类IP地址的第一个字节最高三位是“110”,所以地址网络号的取值于192—223之间。一般用小型网络。可用的C类网络有209万余个,每个网络最多包含254台主机。

4)D类
D类IP地址是多播地址。该类IP地址第一个字节的高四位是“1110”,所以地址的网络号取值于224—239之间,一般用于多路广播用户。

5)E类
E类地址是保留地址,该类IP地址第一字节的高四位是“1111”,所以地址的网络号取值于240—225之间。

#)在IP地址的3中主要类型里,各保留了3个区域作为私有地址

  • A类IP地址的私有地址:10.0.0.0—10.255.255.255
  • B类IP地址的私有地址:172.16.0.0—172.31.255.255
  • C类IP地址的私有地址:192.168.0.0—192.168.255.255

#)回送地址:127.0.0.1
回送地址也是本地地址,等效于localhost或本机IP地址,一般用于测试使用。【ping 127.0.0.1可以测试本机TCP/IP是否正常】

IP地址的转换函数

1)inet_aton()
#include <arpa/inet.h>
int inet_aton(const char *strptr, struct in_addr *addrptr);
功能:将strptr所指的字符串转换成32位的网络字节序二进制值

2) inet_addr()
int_addr_t inet_addr(const char *strptr);
功能将strptr所指的字符串转换成32位的网络字节序二进制值,成功返回转换后的地址。

3)inet_ntoa()
char *inet_ntoa(stuct in_addr inaddr);
功能:将32位网络字节序二进制地址转换成点分十进制的字符串。

4)inet_pton()
int inet_pton(int af, const char *src, void *dst);
功能:将IPV4/IPV6的地址转换成binary格式

端口号

概念
所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号 。
端口号的分类:

  • 众所周知端口:1-255
  • UNIX系统占用端口:256-1023
  • 注册端口:1024-49150
  • 动态或私有端口:49151-65536

字节序

概述
字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。

字节序的分类

把给定系统所采用的字节序称为主机字节序。为了避免不同类别主机之间在数据交换时由于对于字节序的不同而导致的差错,引入了网络字节序。

1)主机字节序
不同类型CPU的主机中,内存存储了多字节整数序列有两种方法:

  • 小端序(litter-endian)— 低序字节存储在低地址
  • 大端序(bid-endian )— 高序字节存储在低地址(低地址即存储单元的起始地址)

【X86系列的CPU都是小端序】

2)网络字节序
网络字节序是以大端序的方法存储多字节整数序列,网络中传输的数据必须按网络字节序的方式。

字节序转换函数

1)主机字节序转换成网络字节序

  • u_long htonl (u_long hostlong);
  • u_short htons (u_short short);

2) 网络字节序转换成主机字节序

  • u_long ntohl (u_long hostlong);
  • u_short ntohl (u_short short);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值