Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- Web
- WarGame
- 웹해킹
- CodeEngn
- System
- 네트워크
- TCP
- 소프트웨어
- network
- 드림핵
- Webhaking
- 리버싱
- 모의해킹
- XSS
- 네트워크보안
- 소프트웨어보안
- 워게임
- dreamhack
- reversing
- hacking
- 웹
- 비박스
- 해킹
- bee-box
- webhacking
- 순서도
- ftz
- 시스템
- 시스템해킹
- 알고리즘
Archives
- Today
- Total
Without a Break
TCP: Transmission Control Protocol 본문
TCP가 제공하는 서비스
TCP 서비스
- UDP와 같은 네트워크 계층(IP) 이용
- UDP와는 완전히 다른 서비스를 응용 계층에 제공
- 연결지향의 신뢰성있는 바이트스트림 서비스를 제공 => "TCP provides a connection-oriented, reliable, byte stream service"
1. 신뢰성 서비스
1) 정보단위인 세그먼트인 IP로 전송
- 응용이 보내는 데이터는 TCP가 전송하기 적합한 크기로 나뉘어짐 (반면, UDP는 각 응용이 UDP 데이터그램을 적절한 크기로 만들어 줌)
- IP 데이터그램 = IP 헤더 + TCP 세그먼트(TCP 헤더+TCP데이터)
2)TCP는 세그먼트를 보낼 때마다 타이머를 설정
- 수신측으로부터 확인 응답 (ACK) 메세지를 기다림
- 확인 응답이 오지 않을 경우 세그먼트를 재전송
3) TCP가 연결의 상대편으로부터 데이터를 받으면 확인응답을 보냄
- 보통 짧은 시간동안(<1초) 지연된 후에 보내짐
4) end-to-end checksum: TCP 헤더와 데이터에 검사합(checksum)을 함
- 데이터가 전송 중에 변화되었는지 검출하는 것이 목적
- 오류가 난 세그먼트는 버리고 확인 응답을 보내지 않음 (송신자의 타임아웃과 재전송을 기다림)
5)TCP 세그먼트는 IP 데이터그램 형태로 전송되므로, 순서를 지키지 않고 수신측에 도착 가능
- 수신측 TCP는 필요 시 데이터를 재정렬해, 정확한 순서대로 응용에 전달
6) IP는 라우팅 과정에서 중복이 발생해도 이를 허용하나, 수신측 TCP는 중복된 데이터를 반드시 폐기
7) TCP는 흐름 제어(flow control) 제공
- TCP 연결의 각 종단은 유한한 버퍼를 가짐
- 수신측 TCP는 버퍼용량을 초과하지 않는 범위의 데이터만 버퍼에 저장 => 송신측 TCP는 수신측 TCP의 빈 버퍼 공간만큼만 보내도록 제어)
2. 바이트 스트림 서비스
- TCP 연결을 통해서 양방향의 8-bit byte stream이 교환 => 응용에 full-duplex 서비스 제공해 입력 스트림과 출력 스트림이 독립됨
- TCP는 레코드 구분자 삽입 기능을 전혀 지원하지 않음 => 응용은 메세지를 구분하는 단위인 레코드 구분자가 필요시, 알아서 삽입해야 함
- TCP 바이트에 대한 해석을 전혀 하지 않음
연결-지향(connection-oriented) 서비스의 의미
- 두 응용 프로세스(클라이언트, 서버)가 데이터를 교환 하기 전에 서로 TCP 연결을 확립함을 의미
- Three-way handshake
TCP 헤더 필드
Port number 필드
1) TCP 세그먼트를 송신하고 수신하는 응용을 구분하기 위해서 사용
2) IP 주소 하나와 포트 번호 하나의 조합을 소켓이라고 함
- socket pair : 클라이언트와 서버의 두 소켓을 묶어서 부르는 말
- socket pair는 인터넷 상의 TCP 연결을 유일하게 식별하는데 사용 가능한 식별자
Sequence number 필드
- 송신 측의 TCP로부터 수신 측의 TCP로 간느 데이터 스트림의 바이트를 구분하기 위해 매 바이트에 붙여진 번호
- 32비트 부호 없는 번호로서, 0부터 2^32-1을 초과하면 다시 0부터 시작
- 새로운 연결을 확립하는 과정에서, 세그먼트에 SYN 플래그가 설정될 경우, 순서 번호 필드에는 호스트가 연결에 선택한 초기 순서 번호(ISN)을 기재 (SYN 플래그는 1바이트를 소모한다고 가정)
확인 응답 번호 (acknowledgement number; ACK number) 필드
- 수신한 마지막 바이트의 순서 번호 +1을 기재 => 즉, 다음 수신할 첫 바이트의 순서 번호를 나타냄
- 이 필드는 ACK 플래그가 설정 되어 있을 때만 유효 (연결이 설립된 이후엔 계속 ACK 플래그가 설정됨)
TCP에서 순서 번호와 확인 응답 번호의 특징
1) TCP는 각 방향으로 데이터를 흘려보내는 full-duplex 서비스를 응용에 제공함
- 따라서, ㅇ녀결의 각 종단 호스트는 각 방향에 대한 순서 번호를 저장하고 관리해야 함
2) tcp는 Selective ACK(SACK)나 Negative ACK(NACK)를 지원하지 않는 슬라이딩 윈도우 프로토콜의 일종
- 확인 응답 번호 필드의 의미 상, 먼저 도착한 세그먼트나 손상된 세그먼트에 대한 정보를 알릴 수도 없음
- SACK의 경우 TCP 옵션으로 추후 추가됨
3) Cumulative ACK : 어디까지 전송이 완료되었는지 송신자에게 알림
Checksum 필드
- TCP header와 TCP data 모두에 대한 checksum
- 필수 필드로서 송신 측에서 계산, 저장되고 수신 측에서 검사
- UDP checksum과 같은 의사 헤더를 이용하여 계산
긴급 포인터 필드
- (데이터 필드 앞부분에 삽입된) 긴급 데이터의 크기를 나타냄
- URG 플래그가 설정되어 있을 때만 유효
- 송신 측이 상대편에게 긴급한 데이터를 보낼 수 있음 (순서 번호에 계산되지 않음)
- 요즘은 거의 안 쓰임
* TCP 사양은 RFC793
'Network > 네트워크보안과프로그래밍' 카테고리의 다른 글
BSD Sockets API-based Network Programming (0) | 2022.11.06 |
---|---|
TCP Connection Establishment and Termination (0) | 2022.10.07 |
UDP: User Datagram Protocol (0) | 2022.09.30 |
Address Resolution Protocol, ARP (0) | 2022.09.27 |
Internet Protocol (0) | 2022.09.24 |