TCP 프로토콜 구조와 TCP의 플래그
강의영상
https://www.youtube.com/watch?v=cOK_f9_k_O0&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=21
목차
- TCP 프로토콜
- TCP 플래그
- TCP를 이용한 통신과정
- TCP 상태 전이도
- 실습
TCP는 UDP와 다르게 기능이 굉장히 많다
TCP 프로토콜
TCP 프로토콜이란?
- 전송 제어 프로토콜 (Transmission Control Protocol, TCP)은 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 통신을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다.
- TCP의 안정성을 필요로 하지 않는 애플리케이션의 경우 일반적으로 TCP 대신 UDP를 사용한다.
- TCP는 UDP보다 안전하지만 느리다.
TCP 프로토콜의 구조

TCP의 플래그
U A P R S F만 알면 된다
- TCP는 계속 상대방에게 연결 상태를 물어본다
- 플래그는 그 연결 상태를 나타내는 값
- TCP의 주된 기능이 플래그로 구분됨
- U: Urgent (긴급 비트): 지금 보내는 패킷에 우선순위가 높은 데이터가 포함됨
- Ugent Pointer: 어디부터가 긴급 데이터인지 알려줌(중요하진 않음)
- A: Ack (승인 비트): 물어본 것에 대한 응답 플래그 (중요)
- P: Push (밀어넣기 비트): TCP가 일정크기만큼 쌓여야 데이터를 보낼 수 있는데, 상관없이 계속 데이터를 밀어넣을 때 사용
- R: Reset (초기화 비트): 연결에 문제가 생겨서 새로고침 할 때 사용 (중요)
- S: Synk (동기화 비트): 상대방과 연결을 시작할 때 사용 (가장 중요)
- F: Fin (종료 비트): 연결을 끊을 때 사용 (중요)
TCP 3way Handshake
강의영상
https://www.youtube.com/watch?v=Ah4-MWISel8&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=22
TCP를 이용한 통신과정
연결 수립 과정: TCP를 이용한 데이터 통신을 할 때 프로세스와 프로세스를 연결하기 위해 가장 먼저 수행되는 과정
3 Way Handshake
- 클라이언트가 서버에게 요청 패킷을 보내고
- 서버가 클라이언트의 요청을 받아들이는 패킷을 보내고
- 클라이언트는 이를 최종적으로 수락하는 패킷을 보낸다.
보안을 위해, SEQ 번호와 ACK 번호를 계산할 줄 알아야 함

- 처음에 SEQ 번호를 랜덤하게, ACK 번호는 0으로 보냄
- 서버의 답장: ACK 번호 = 클라이언트한테 받은 SEQ 번호 +1, SEQ 번호는 랜덤
- 클라이언트의 재답장: ACK 번호 = 서버한테 받은 SEQ 번호 +1, SEQ 번호는 서버한테 받은 ACK 번호 (동기화가 됨)
이 전체 과정은 연결을 위한 과정
따라서 전체 과정 끝나고 다시 요청을 보내는 건 클라이언트 (실제 데이터를 주고받기 시작)
-> 누군가 동기화된 값을 계산해서 hijacking 할 수도 있다 (연결 끝나고, 서버가 보내는 정보가 클라이언트 말고 다른 해커에게 갈 수도 있음)
TCP를 이용한 데이터 전송 과정
데이터 송수신 과정 (연결이 수립되고 난 다음)
: TCP를 이용한 데이터 통신을 할 때 단순히 TCP 패킷만을 캡슐화해서 통신하는 것이 아닌 페이로드를 포함한 패킷을 주고 받을 때의 일정한 규칙
- 1. 보낸 쪽에서 또 보낼 때는 SEQ 번호와 ACK 번호가 그대로다. (연결 상태 마지막과 동일)
- 받는 쪽에서 SEQ 번호는 보낸 ACK 번호가 된다.
- 받는 쪽에서 ACK 번호는 받은 SEQ 번호 + 데이터 크기: 연결 수립 단계와 다른 부분 (연결 수립 시에는 payload (데이터 크기)가 필요 없었다)

TCP의 연결 상태 변화
강의영상
- 굉장히 복잡하다

- LISTEN: 포트 번호를 열어놓고 있는 상태(서버 프로그램이 사용 중인 상태): 상대 요청을 항상 듣고 있는 상태
- ESTABLISEHD: 서버와 클라가 연결이 서로 수립된 상태
- active open: 클라이언트가 서버의 포트를 (능동적으로) 엶


실습
강의영상
https://www.youtube.com/watch?v=WseqBDo-j3Y&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=25
'Computer Science > Network' 카테고리의 다른 글
[따라學IT] 11. www(웹)를 이용할 때는 이렇게 데이터를 주고받는다 (0) | 2022.08.09 |
---|---|
[따라學IT] 10. NAT와 포트 포워딩 - 이론 (0) | 2022.08.06 |
[따라學IT] 08. 비연결지향형 UDP 프로토콜 - 이론 (0) | 2022.07.24 |
[따라學IT] 07. 컴퓨터의 프로그램끼리는 이렇게 데이터를 주고 받는다 - 4계층 이론 (0) | 2022.07.17 |
[따라學IT] 06. 멀리 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다 (0) | 2022.07.10 |