интерсеть
IP
IP
UDP
UDP
Порт А
Порт B
…
Порт C
Порт D
…
Процесс
1
Процесс
2
Процесс
3
Процесс
4
Source Port
(16 бит)
Destination Port
(16 бит)
Length
(16 бит)
Checksum
(16 бит)
Data
интерсеть
IP
IP
TCP
TCP
Порт А
Порт B
…
Порт C
Порт D
…
Процесс
1
Процесс
2
Процесс
3
Процесс
4
IP-пакеты
Соединение TCP
Протокол TCP обеспечивает передачу потоков данных, при этом он использует механизм окон
Все байты исходящего потока последовательно нумеруются
Размер окна задается получателем в момент установления соединения, но может изменяться им в процессе передачи
На стороне приемника окно – это фактически буфер приема, на стороне источника – абстракция, определяющая порядок передачи
В исходный момент окно расположено в начале потока
Поток байт источника
0
Окно реконструкции входящего потока приемника
…
Источник разбивает исходящий поток на пакеты (сегменты)
Источник может послать все пакеты в окне без подтверждения, но должен запускать таймер для каждого из них
Получатель подтверждает номер последнего принятого байта
Поток байт источника
0
Буфер реконструкции входящего потока приемника
…
Пакеты данных
Подтверждения
Получатель в ходе реконструкции потока данных передвигает начало окна на первый еще не полученный байт
Источник продвигает окно после получения очередного подтверждения
Поток байт источника
0
Окно реконструкции входящего потока приемника
…
С точки зрения источника, выходной поток байт делится на 4 части
A – посланные и подтвержденные байты
B – посланные, но еще не подтвержденные байты
C – байты, которые могут быть посланы без подтверждения
D – байты, которые еще не могу быть посланы
Поток байт источника
0
Окно реконструкции входящего потока приемника
…
A
B
C
D
Если при передаче потерян какой-либо пакет, источник не получит подтверждения и спустя время тайм-аута начнет повторную передачу всех неполученных байт
даже если следующие пакеты были получены приемником, он посылает номер последнего байта полностью реконструированного потока
Каждое подтверждение полностью описывает текущую ситуацию для источника
если получатель отправил подтверждение, но оно не дошло до источника, следующее доставленное подтверждение отменит необходимость повторной передачи данных источником
Таким образом, механизм окон обеспечивает
Надежную передачу
Контроль трафика
Эффективное использование пропускной способности сети (источник может посылать данные, не дожидаясь подтверждения всех уже отправленных данных)
Source Port
(16 бит)
Destination Port
(16 бит)
Sequence Number
(16 бит)
Acknowledgment Number
(16 бит)
Data
Offset
(4 бит)
F
I
N
S
Y
N
R
S
T
P
S
H
A
C
K
U
R
G
0
Window
(16 бит)
Urgent Pointer
(16 бит)
Options + Padding
(N* 32 бит)
Data
E
C
E
C
W
R
Checksum
(16 бит)
Source Port
(16 бит)
Destination Port
(16 бит)
Sequence Number
(16 бит)
Acknowledgment Number
(16 бит)
Data
Offset
(4 бит)
F
I
N
S
Y
N
R
S
T
P
S
H
A
C
K
U
R
G
0
Window
(16 бит)
Urgent Pointer
(16 бит)
Options + Padding
(N* 32 бит)
Data
E
C
E
C
W
R
Checksum
(16 бит)
Source Port
(16 бит)
Destination Port
(16 бит)
Sequence Number
(16 бит)
Acknowledgment Number
(16 бит)
Data
Offset
(4 бит)
F
I
N
S
Y
N
R
S
T
P
S
H
A
C
K
U
R
G
0
Window
(16 бит)
Urgent Pointer
(16 бит)
Options + Padding
(N* 32 бит)
Data
E
C
E
C
W
R
Checksum
(16 бит)
Процесс A
Процесс B
socket()
socket()
Процесс A
Процесс B
socket()
socket()
bind()
bind()
Процесс A
Процесс B
socket()
socket()
bind()
bind()
recvfrom()
sendto()
Процесс A
Процесс B
socket()
socket()
bind()
bind()
recvfrom()
sendto()
recvfrom()
sendto()
close()
close()
При использовании взаимодействия, ориентированного на соединение, клиент и сервер выполняют разные последовательности вызовов
Сервер
Создание сокета
int socket(int domain, int type, int protocol);
Назначение адреса сокету
int bind(int s, const struct sockaddr *name, int namelen);
Сервер
Клиент
socket()
bind()
Сервер
Регистрация входящих запросов на соединение
int listen(int s, int backlog);
s – дескриптор сокета
backlog – максимальное число ожидающих запросов
Прием запроса на соединение
int accept(int s, struct sockaddr *addr, socklen_t *len);
s – дескриптор сокета
addr – адрес буфера для размещения адреса клиента
len – размер буфера, предназначенного для адреса клиента
Сервер
Клиент
socket()
bind()
listen()
accept()
Клиент
Создание сокета
int socket(int domain, int type, int protocol);
Запрос на установление соединения с сервером
int connect(int s, struct sockaddr *addr, socklen_t *len);
s – дескриптор сокета
addr – адрес буфера, в котором размещен адрес сервера
len – размер буфера addr
Сервер
Клиент
socket()
bind()
listen()
accept()
socket()
connect()
Передача/прием
size_t recv(int s, void *buffer, size_t length, int flags);
size_t send(int s, const void *message, size_t length, int flags);
s – дескриптор сокета
buffer – адрес буфера приема/передачи
length – размер буфера в байтах
flags – флаги операции
Сервер
Клиент
socket()
bind()
listen()
accept()
socket()
connect()
sendto()
recv()
Клиент и сервер
Отключение сокета
int shutdown(int socket, int how);
s – дескриптор сокета
how – тип отключения (SHUT_RD, SHUT_WR, SHUT_RDWR)
Закрытие сокета
int close(int s);
Сервер
Клиент
socket()
bind()
listen()
accept()
socket()
connect()
sendto()
recv()
close()
shutdown()
close()
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть