TCP

이고은·2021년 10월 6일
0

네트워크

목록 보기
3/7
post-thumbnail


[그림 출처: 정보통신기술용어해설]

Sequence Number, Acknowledgement Number 필드가 있다.
TCP에는 Option 필드가 있는데, 잘 안붙는데 4byte씩 최대 10개까지 붙을 수 있다. 그래서 20byte ~ 60byte까지 가능

Flag

"나 너한테 보내도 돼?"
"어 가능해!"
"안돼ㅠ"
"지금 보내는 데이터는 중요한 정보야"
등등등...
이런 정보를 지정하는 것이 바로 이 flag값이다.

U:Urgent Flag(긴급비트)

지금 보내는 데이터가 우선순위가 높은 정보가 포함되어 있다.
좀 더 빨리 처리해달라는 요청

  • Urgent Pointer와 세트
    어디서부터가 중요한 정보인지 알려주는 포인터

A:Ack Flag(승인비트)*

물어본 것에 대한 "승인"을 나타내는 비트
"응 보내도 돼!"

P:Push Flag(밀어넣기 비트)

TCP 버퍼가(정보를 받을 수 있는 공간) 일정 이상 쌓여야 가능한데,
상관없이 그냥 밀어넣겠다는 뜻

R:Reset Flag(초기화 비트)*

상대방과 연결이 되어있는 상태에서 추가적으로 데이터를 주고받으려고 하는데 문제가 발생했으니 이 연결을 초기화하자.

S:Sync Flag(동기화 비트)***

상대방과 연결을 시작할 때 무조건 사용하는 flag
Sync bit가 보내고 난 이후부터 서로의 상태를 동기화 시킨다.
"받았어?" "어 받았어" "또 보낸다" "응 보내도 돼"..

F:Finish Flag(종료 비트)*

데이터를 다 주고받은 다음 연결을 끊을 때 사용하는 비트

3-way handshake

  1. 클라이언트가 서버에게 요청 패킷을 보낸다.
    seq num: 100, ack num:0, sync flag
    seq(clnt->serv)를 처음 보낼 때는 랜덤한 값!(100)

  2. 서버가 클라이언트의 요청을 받아들이는 패킷을 보내고
    seq num: 2000, ack num:101(serv seq num+1), sync+ack flag
    seq(serv->clnt)를 처음 보낼 때는 랜덤한 값!(100)

  3. 클라이언트는 이를 최종적으로 수락하는 패킷을 보낸다.
    seq num: 101(serv seq num+1), ack num:2001(clnt seq num+1), ack flag

위의 3개의 과정을 3-way handshake라고 부른다.

만약 clnt가 아닌 다른 누군가가 저 sequence number로

TCP를 이용한 통신과정

  1. 보낸 쪽에서 또 보낼 때에는 seq번호와 ack번호가 그대로.
  2. 받는 쪽에서 seq번호는 받은 ack번호가 된다.
  3. 받는 쪽에서 ack번호는 받은 seq번호 + 데이터 크기

ex)
clnt -> serv
"갯마을 차차차 12화"를 요청(데이터 크기:100)
아까 3-way hand shake를 마친 후 S, A 그대로 사용
S:101, A:2001, PUSH+ACK
SYNC SENT

serv -> clnt
"영상"으로 답장(데이터 크기: 500)
S: 2001, A: 101+100
SYNC RECEIVED

clnt -> serv
잘 받았어!
s: 201, S: 2001+500
ESTABLISHED

TCP 상태전이도


[그림 출처]

LISTEN: clnt가 요청하면 serv가 항상 듣고있는 상태
ESTABLISHED: clnt-serv 연결이 수립된 상태

profile
MLOps Engineer가 되고싶은 ML과 DevOps에 관심이 많은 컴공생입니다👩🏻‍💻

0개의 댓글